home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / ASSEMBLER / MOTOASM / EXAMPLES / as11 / FORTH11 < prev    next >
Text File  |  1994-09-03  |  97KB  |  3,576 lines

  1. *
  2. *
  3. *
  4. *       FORTH11.ASM          fig-FORTH for the Motorola MC68HC11A1
  5. *
  6. *       October 30, 1990
  7. *
  8. *
  9. ******************************************************************************
  10. *
  11. *      Memory Map
  12. *
  13. *
  14. *           $0000 - $00ff        68hc11 internal ram
  15. *
  16. *           $1000 - $103F        68hc11 internal registers
  17. *
  18. *           $2000 - $7FFF        8k RAM 
  19. *
  20. *           $E000 - $FFFF        8k EPROM w/FORTH and 68hc11 vectors
  21. *
  22.        NAM          FORTH
  23. *
  24. ******************************************************************************
  25. *
  26. *                   forth interpreter/compiler
  27. *
  28. ******************************************************************************
  29. *
  30. *
  31. *
  32. MEMTOP  EQU         $7FFF
  33. RAMTOP  EQU         $7600
  34. OPTION  EQU         $1039
  35. *
  36. *       each disk buffer block is one 256 byte sector
  37. *       with a 2 byte block id and a 2 byte null terminator
  38. *
  39. *       8 - 256 byte blocks = 2 - 1024 byte screens
  40. *
  41. NBLK    EQU         8
  42. MEMEND  EQU         260*NBLK+RAMTOP
  43. *
  44. *
  45. *
  46. REGBS   EQU         $1000               ; start of registers
  47. BAUD    EQU         REGBS+$2B           ; sci baud reg
  48. SCCR1   EQU         REGBS+$2C           ; sci control1 reg
  49. SCCR2   EQU         REGBS+$2D           ; sci control2 reg
  50. SCSR    EQU         REGBS+$2E           ; sci status reg
  51. SCDAT   EQU         REGBS+$2F           ; sci data reg
  52. PORTA   EQU         REGBS+$00
  53. PACTL   EQU         REGBS+$26
  54. TMSK2   EQU         REGBS+$24
  55. TFLG2   EQU         REGBS+$25
  56. *
  57. *
  58. *
  59. ******************************************************************************
  60. *
  61. *                   zero page memory
  62. *
  63. ******************************************************************************
  64. *
  65. N       EQU         $0000             ; scratch for (FIND),ENCLOSE,CMOVE
  66. *                                     ; EMIT,KEY,SP@,SWAP,DOES>,COLD
  67. *
  68. *                   registers used by the FORTH virtual machine
  69. *
  70. W       EQU         $0020             ; instruction reg points to 6800 code
  71. IP      EQU         $0022             ; inst. pointer points to pointer to 6800 code
  72. RP      EQU         $0024             ; return stack pointer
  73. UP      EQU         $0026             ; pointer to base of current user@@s @@USER@@ table
  74. *                                       ( altered during multitasking )
  75. *
  76. *
  77. ******************************************************************************
  78. *
  79. *                   system parameters initialized by COLD or WARM
  80. *                   names refer to FORTH words of similar ( no X ) name
  81. *
  82. ******************************************************************************
  83. *
  84.         ORG         $2000
  85. *
  86. UORIG   RMB         6                  ; user variables
  87. XSPZER  RMB         2                  ; initial top of data stack for user
  88. XRZERO  RMB         2                  ; initial top of return stack
  89. XTIB    RMB         2                  ; start of terminal input buffer
  90. XWIDTH  RMB         2                  ; name field width
  91. XWARN   RMB         2                  ; warning message mode (0 = no disc)
  92. XFENCE  RMB         2                  ; fence for FORGET
  93. XDP     RMB         2                  ; dictionary pointer
  94. XVOCL   RMB         2                  ; vocabulary linking
  95. XBLK    RMB         2                  ; disk block being accessed
  96. XIN     RMB         2                  ; scan pointer into the block
  97. XOUT    RMB         2                  ; cursor position
  98. XSCR    RMB         2                  ; disc screen being accessed
  99. XOFSET  RMB         2                  ; disc sector offset for multi disc
  100. XCONT   RMB         2                  ; last word in primary search vocab.
  101. XCURR   RMB         2                  ; last word in extensible vocabulary
  102. XSTATE  RMB         2                  ; interpret/compile mode flag
  103. XBASE   RMB         2                  ; number base for i/o numeric conversion
  104. XDPL    RMB         2                  ; decimal point place
  105. XFLD    RMB         2                  ;
  106. XCSP    RMB         2                  ; current stack pos, for compile checks
  107. XRNUM   RMB         2                  ;
  108. XHLD    RMB         2                  ;
  109. XDELAY  RMB         2                  ; carriage return delay count
  110. XCOLUM  RMB         2                  ; carriage width
  111. IOSTAT  RMB         2                  ; last acia status from read/write
  112. *
  113. *                   end of user table, start of common system variables
  114. *
  115. XUSE    RMB         2                  ;
  116. XPREV   RMB         2                  ;
  117. XTRACK  RMB         2                  ; ( 4 spares ! )
  118. XSECTOR RMB         2
  119. XDSTAT  RMB         2
  120. XBLOCK  RMB         2
  121. XBUFFER RMB         2
  122. *
  123. *                   code here through REND is overwritten at time of cold
  124. *                   load.
  125. *
  126.         FCB         $C5
  127.         FCC         'FORT'
  128.         FCB         $C8
  129.         FDB         NOOP-7
  130. FORTH   FDB         DODOES,DOVOC,$81A0,TASK-7
  131.         FDB         0
  132.  
  133.         FCC         '(C) Forth Interest Group,  1979'
  134.  
  135.         FCB         $C4
  136.         FCC         'TAS'
  137.         FCB         $CB
  138.         FDB         FORTH-8
  139. TASK    FDB         DOCOL,SEMIS
  140. REND    EQU         *                   ; first empty location in dictionary
  141. ******************************************************************************
  142. *
  143. *                   
  144. *
  145. ******************************************************************************
  146.         ORG         $E000               ;
  147. *
  148. *       initialize 
  149. *
  150. INIT    SEI     
  151.         LDAA        #$B3
  152.         STAA        OPTION              ; 
  153. *
  154. *       initialize sci for 9600 baud at 8.0 mhz
  155. *
  156.         LDAA        #$30
  157.         STAA        BAUD                ; baud register
  158.         LDAA        #$00
  159.         STAA        SCCR1
  160.         LDAA        #$0C
  161.         STAA        SCCR2               ; enable
  162. ******************************************************************************
  163. *
  164. *                   cold entry
  165. *
  166. ******************************************************************************
  167. ORIG    NOP
  168.         JMP         CENT
  169. ******************************************************************************
  170. *
  171. *                   warm entry
  172. *
  173. ******************************************************************************
  174.         NOP                           ;
  175.         JMP         WENT              ; warm start 
  176. *                                     ; keeps current dictionary intact
  177. ******************************************************************************
  178. *
  179. *                   startup parameters
  180. *
  181. ******************************************************************************
  182.         FDB         $6811,0001        ; cpu and revision
  183.         FDB         0                 ; topmost word in FORTH vocabulary
  184. BACKSP  FDB         $08               ; backspace character for editing
  185. UPINIT  FDB         UORIG             ; initial user area
  186. SINIT   FDB         RAMTOP-$100       ; initial top of data stack
  187. RINIT   FDB         RAMTOP-2          ; initial top of return stack
  188.         FDB         RAMTOP-$D0        ; terminal input buffer
  189.         FDB         31                ; initial name field width
  190.         FDB         0                 ; initial warning mode (0 = no disc)
  191. FENCIN  FDB         REND              ; initial fence
  192. DPINIT  FDB         REND              ; cold start value for DP
  193. VOCINT  FDB         FORTH+8           ; cold start value for VOC-LINK
  194. COLINT  FDB         80                ; initial terminal carriage width
  195. DELINT  FDB         4                 ; initial carriage return delay
  196. *
  197. *
  198. *
  199. PULABX  PULA                          ; get data word
  200.         PULB
  201.  
  202. STABX   STD         0,X               ; store at address
  203.         BRA         NEXT
  204. *
  205. GETX    LDD         0,X               ; get data from address
  206.  
  207. PUSHBA  PSHB                          ; and save on stack
  208.         PSHA
  209. *
  210. *=================== the virtual machine =====================================
  211. *
  212. NEXT    LDX         IP
  213.         INX                           ; pre-increment mode
  214.         INX
  215.         STX         IP
  216.  
  217. NEXT2   LDX         0,X               ; get W which points to CFA of word to be done
  218. NEXT3   STX         W
  219.  
  220. NEXT5   LDX         0,X               ; get VECT which points to executable code
  221.         JMP         0,X               ; and then do it
  222.         NOP
  223. *
  224. *=============================================================================
  225. *
  226. *=======>> 1 <<     LIT               ; primitive
  227. *
  228.         FCB         $83
  229.         FCC         'LI'
  230.         FCB         $D4
  231.         FDB         0                 ; link of zero to terminate dictionary scan
  232. LIT     FDB         *+2
  233.         LDX         IP                ; get instruction pointer
  234.         INX
  235.         INX
  236.         STX         IP                ; x points to next instruction
  237.         LDD         0,X               ; next instruction is 16 bit literal
  238.         JMP         PUSHBA            ; so push it on stack
  239. *
  240. *=======>> 3 <<     EXECUTE           ; primitive
  241. *
  242.         FCB         $87
  243.         FCC         'EXECUT'
  244.         FCB         $C5
  245.         FDB         LIT-6
  246. EXEC    FDB         *+2
  247.         TSX                           ; move stack pointer to x
  248.         LDX         0,X               ; get code field address (CFA)
  249.         INS                           ; pop stack
  250.         INS
  251.         JMP         NEXT3             ; go execute word that cfa points to
  252. *
  253. *=======>> 4 <<     BRANCH
  254. *
  255.         FCB         $86
  256.         FCC         'BRANC'
  257.         FCB         $C8
  258.         FDB         EXEC-10
  259. BRAN    FDB         ZBYES             ; go do unconditional branch
  260. *
  261. *=======>> 5 <<     0BRANCH           ; primitive
  262. *
  263.         FCB         $87
  264.         FCC         '0BRANC'
  265.         FCB         $C8
  266.         FDB         BRAN-9
  267. ZBRAN   FDB         *+2
  268.         PULA                          ; get flag
  269.         PULB
  270.         ABA                           ; add together to see if zero
  271.         BNE         ZBNO              ; a and b are not zero - don@@t branch
  272.         BCS         ZBNO              ; if overflow a and b are not zero !
  273. *
  274. *                   flag is false ( zero ) - branch
  275. *
  276. ZBYES   LDX         IP                ; code is shared with BRANCH, (+LOOP),(LOOP)
  277.         LDD         2,X               ; get offset
  278.         ADDD        IP                ; add offset to instruction pointer
  279.         STD         IP                ; save it
  280.         JMP         NEXT              ; go branch !
  281. *
  282. *                   flag is true ( non-zero ) - don@@t branch
  283. *
  284. ZBNO    LDX         IP                ; no branch. this code is shared with (+LOOP),(LOOP)
  285.         INX                           ; jump over branch delta
  286.         INX
  287.         STX         IP                ; save pointer
  288.         JMP         NEXT              ; go do next instruction
  289. *
  290. *=======>> 6 <<     (LOOP)            ; primitive
  291. *
  292.         FCB         $86
  293.         FCC         '(LOOP'
  294.         FCB         $A9
  295.         FDB         ZBRAN-10
  296. XLOOP   FDB         *+2
  297.         CLRA                          ; upper 8 is zero
  298.         LDAB        #1                ; get set to increment counter by 1
  299.         BRA         XPLOP2            ; go steal other guy@@s code
  300. *
  301. *=======>> 7 <<     (+LOOP)           ; primitive
  302. *
  303.         FCB         $87
  304.         FCC         '(+LOOP'
  305.         FCB         $A9
  306.         FDB         XLOOP-9
  307. XPLOOP  FDB         *+2               ; +LOOP has an unsigned loop counter
  308.         PULA                          ; get increment value
  309.         PULB
  310. XPLOP2  TSTA                          ; check if forward or backward looping
  311.         BPL         XPLOF             ; forward looping
  312.  
  313.         LDX         RP
  314.         ADDD        2,X
  315.         STD         2,X
  316.  
  317.         SEC
  318.         SBCB        5,X
  319.         SBCA        4,X
  320.         BPL         ZBYES
  321.         BRA         XPLONO            ; fall thru
  322. *
  323. XPLOF   NOP
  324.         LDX         RP
  325.         ADDD        2,X
  326.         STD         2,X
  327.  
  328. *       BSR         XPLOPS
  329.  
  330.         SUBD        4,X
  331.         BMI         ZBYES
  332. XPLONO  INX                           ; done, don@@t branch back
  333.         INX
  334.         INX
  335.         INX
  336.         STX         RP
  337.         BRA         ZBNO
  338. *
  339. *=======>> 8 <<     (DO)              ; primitive
  340. *
  341.         FCB         $84
  342.         FCC         '(DO'
  343.         FCB         $A9
  344.         FDB         XPLOOP-10
  345. XDO1    FDB         *+2               ; this is the RUN-TIME DO, not the COMPILING DO
  346.         LDX         RP                ; get copy of return pointer
  347.         DEX
  348.         DEX
  349.         DEX
  350.         DEX
  351.         STX         RP                ;
  352.         PULA                          ; pull data word off stack
  353.         PULB
  354.         STD         2,X               ; save on return stack
  355.         PULA                          ; pull ??? off stack
  356.         PULB
  357.         STD         4,X               ; save on return stack
  358.         JMP         NEXT
  359. *
  360. *=======>> 9 <<     I                 ; primitive
  361. *
  362.         FCB         $81               ; I
  363.         FCB         $C9
  364.         FDB         XDO1-7
  365. I       FDB         *+2
  366.         LDX         RP                ; looks like I is kept on return stack
  367.         INX
  368.         INX
  369.         JMP         GETX              ;
  370. *
  371. *=======>> 10 <<    DIGIT
  372. *
  373.         FCB         $85
  374.         FCC         'DIGI'
  375.         FCB         $D4
  376.         FDB         I-4
  377. DIGIT   FDB         *+2               ; legal input range is 0-9, A-Z
  378.         TSX                           ; copy stack pointer to x
  379.         LDAA        3,X
  380.         SUBA        #$30              ; ascii zero
  381.         BMI         DIGIT2            ; if less than @@0@@, ILLEGAL
  382.         CMPA        #$0A
  383.         BMI         DIGIT0            ; if @@9@@ or less
  384.         CMPA        #$11
  385.         BMI         DIGIT2            ; if less than "A"
  386.         CMPA        #$2B
  387.         BPL         DIGIT2            ; if greater than "Z"
  388.         SUBA        #7                ; translate "A" thru "F"
  389.  
  390. DIGIT0  CMPA        1,X
  391.         BPL         DIGIT2            ; if not less than the base
  392.         LDAB        #1                ; set flag
  393.         STAA        3,X               ; store digit
  394. DIGIT1  STAB        1,X               ; store the flag
  395.         JMP         NEXT
  396.  
  397. DIGIT2  CLRB                          ;
  398.         INS
  399.         INS                           ; pop bottom number
  400.         TSX                           ;
  401.         STAB        0,X               ; make sure both bytes are 00
  402.         BRA         DIGIT1
  403. *
  404. *                   the word format in the dictionary is :
  405. *
  406. *       NFA         char-count + 80          lowest address
  407. *                   char 1
  408. *                   char 2
  409. *
  410. *                   char n + $80
  411. *
  412. *       LFA         link high byte \___ point to previous word
  413. *                   link low byte  /
  414. *
  415. *       CFA         CFA high byte  \___ point to 6800 code
  416. *                   CFA low byte   /
  417. *
  418. *       PFA         parameter fields
  419. *                      "        "
  420. *                      "        "
  421. *
  422. *
  423. *=======>> 11 <<    (FIND)
  424. *
  425.         FCB         $86
  426.         FCC         '(FIND'
  427.         FCB         $A9
  428.         FDB         DIGIT-8
  429. PFIND   FDB         *+2
  430.         NOP
  431.         NOP
  432. PD      EQU         N                 ; pointer to dict word being checked
  433. PA0     EQU         N+2
  434. PA      EQU         N+4
  435. PC      EQU         N+6
  436.         LDX         #PD
  437.         LDAB        #4
  438.  
  439. PFIND0  PULA                          ; loop to get arguments off stack
  440.         STAA        0,X
  441.         INX
  442.         DECB
  443.         BNE         PFIND0
  444.  
  445.         LDX         PD
  446. PFIND1  LDAB        0,X               ; get count dict count
  447.         STAB        PC
  448.         ANDB        #$3F
  449.         INX
  450.         STX         PD                ; update PD
  451.         LDX         PA0
  452.         LDAA        0,X               ; get count from arg
  453.         INX
  454.         STX         PA                ; initialize PA
  455.         CBA                           ; compare lengths
  456.         BNE         PFIND4
  457.  
  458. PFIND2  LDX         PA
  459.         LDAA        0,X
  460.         INX
  461.         STX         PA
  462.         LDX         PD
  463.         LDAB        0,X
  464.         INX
  465.         STX         PD
  466.         TSTB                          ; is dict entry neg. ?
  467.         BPL         PFIND8
  468.         ANDB        #$7F              ; clear sign
  469.         CBA
  470.         BEQ         FOUND
  471. PFIND3  LDX         0,X               ; get new link
  472.         BNE         PFIND1            ; continue if link not = 0
  473. *
  474. *                   not found
  475. *
  476.         CLRA
  477.         CLRB
  478.         JMP         PUSHBA
  479. PFIND8  CBA
  480.         BEQ         PFIND2
  481. PFIND4  LDX         PD
  482. PFIND9  LDAB        0,X               ; scan forward to end of this name
  483.         INX
  484.         BPL         PFIND9            ; read until bit 7 is found set
  485.         BRA         PFIND3
  486. *
  487. *
  488. *
  489. FOUND   LDD         PD                ; compute CFA
  490.         ADDD        #4                ;
  491.         PSHB                          ; and push on stack
  492.         PSHA
  493.         LDAA        PC                ; push dictionary count
  494.         PSHA
  495.         CLRA
  496.         PSHA                          ; with upper 8 bits zero
  497.         LDAB        #1                ; construct a true flag
  498.         JMP         PUSHBA            ; and go push on stack
  499. *
  500. *=======>> 12 <<    ENCLOSE
  501. *
  502.         FCB         $87
  503.         FCC         'ENCLOS'
  504.         FCB         $C5
  505.         FDB         PFIND-9
  506. *
  507. *                   FC means offset (bytes) to first character of next word
  508. *                   EW   "     "      @@@    to end of word
  509. *                   NC   "     "      @@@    to next character to start next enclose at
  510. *
  511. ENCLOS  FDB         *+2
  512.         INS
  513.         PULB                          ; now, get low byte, for an 8 bit delimiter
  514.         TSX                           ; copy stack pointer
  515.         LDX         0,X               ; get address to start enclose at
  516.         CLR         N                 ; clear counter
  517. *
  518. *                   wait for a non-delimiter or a NUL
  519. *
  520. ENCL2   LDAA        0,X               ; get a character
  521.         BEQ         ENCL6             ; found null
  522.         CBA                           ; is it the delimiter ?
  523.         BNE         ENCL3             ; yes
  524.         INX                           ; no
  525.         INC         N                 ; bump count
  526.         BRA         ENCL2             ; try it again
  527. *
  528. *                   found first character. Push FC
  529. *
  530. ENCL3   LDAA        N                 ; found first character
  531.         PSHA                          ; push count
  532.         CLRA
  533.         PSHA                          ; push $00
  534. *
  535. *                   wait for a delimiter or a NUL
  536. *
  537. ENCL4   LDAA        0,X               ; get another character
  538.         BEQ         ENCL7             ; it@@s a null
  539.         CBA                           ; check for a delimiter
  540.         BEQ         ENCL5             ; yes - it is the delimiter
  541.         INX                           ; no
  542.         INC         N                 ; increment count
  543.         BRA         ENCL4             ; see if we can find it somewhere
  544. *
  545. *                   found end of word
  546. *
  547. ENCL5   LDAB        N                 ; get count
  548.         CLRA                          ; upper 8 = 0
  549.         PSHB                          ; push EW
  550.         PSHA
  551. *
  552. *                   advance and push NC
  553. *
  554.         INCB                          ; increment
  555.         JMP         PUSHBA
  556. *
  557. *                   found NUL before non-delimiter, therefore there is no word
  558. *
  559. ENCL6   LDAB        N                 ; found NUL
  560.         PSHB
  561.         PSHA
  562.         INCB
  563.         BRA         ENCL7+2           ;
  564. *
  565. *                   found NUL following the word instead of SPACE
  566. *
  567. ENCL7   LDAB        N                 ;
  568.         PSHB
  569.         PSHA
  570. ENCL8   LDAB        N                 ;
  571.         JMP         PUSHBA
  572. *
  573. *                   the next 4 words call system dependent I/O subroutines
  574. *                   which are listed after "-->" in the dictionary
  575. *
  576. *=======>> 13 <<    EMIT
  577. *
  578.         FCB         $84
  579.         FCC         'EMI'
  580.         FCB         $D4
  581.         FDB         ENCLOS-10
  582. EMIT    FDB         *+2
  583.         PULA                          ; get data
  584.         PULA
  585.  
  586.         STAB        N                   ; save B
  587.         STX         N+1                 ; save X
  588. *
  589. EMIT1   LDAB        SCSR                ; read status
  590.         BITB        #$40 
  591.         BEQ         EMIT1               ; 
  592.  
  593.         ANDA        #$7F                ; mask parity
  594.         STAA        SCDAT               ; send character
  595.  
  596.         LDAB        N                   ; recover B & X
  597.         LDX         N+1
  598.  
  599.         JMP         NEXT              ;
  600. *
  601. *=======>> 14 <<    KEY
  602. *
  603.         FCB         $83
  604.         FCC         'KE'
  605.         FCB         $D9
  606.         FDB         EMIT-7
  607. KEY     FDB         *+2
  608.         STAB        N                   ; save b and x
  609.         STX         N+1
  610. *
  611. INSCI   LDAA        SCSR                ; read status reg
  612.         ANDA        #$20
  613.         BEQ         INSCI               ; jump if rdrf=0
  614.  
  615.         LDAA        SCDAT               ; read data register
  616.         ANDA        #$7F                ; mask parity
  617.  
  618.         LDAB        N                   ; restore b and x
  619.         LDX         N+1
  620.  
  621.         PSHA                          ; push data byte
  622.         CLRA
  623.         PSHA                          ; push a zero byte
  624.         JMP         NEXT
  625. *
  626. *=======>> 15 <<    ?TERMINAL
  627. *
  628.         FCB         $89
  629.         FCC         '?TERMINA'
  630.         FCB         $CC
  631.         FDB         KEY-6
  632. QTERM   FDB         *+2
  633.  
  634.         LDAA        SCSR
  635.         ANDA        #$20                ; rdrf set ?
  636.         BEQ         QTERM1
  637.  
  638.         LDAA        SCDAT               ; yes - read data to clear it
  639.         LDAA        #$01                ; flag = true
  640.         BRA         QTERM2
  641.  
  642. QTERM1  CLRA                            ; flag = false
  643.  
  644. QTERM2  CLRB
  645.         JMP         PUSHBA            ; stack the flag
  646. *
  647. *=======>> 16 <<    CR
  648. *
  649.         FCB         $82
  650.         FCC         'C'
  651.         FCB         $D2
  652.         FDB         QTERM-12
  653. CR      FDB         *+2
  654.      
  655.         LDAA        #$D                 ; carriage return
  656. CR1     LDAB        SCSR                ; read status
  657.         BITB        #$40 
  658.         BEQ         CR1                 ; loop until tC=1
  659.  
  660.         ANDA        #$7F                ; mask parity
  661.         STAA        SCDAT               ; send character
  662.  
  663.         LDAA        #$A                 ; line feed
  664. CR2     LDAB        SCSR                ; read status
  665.         BITB        #$40 
  666.         BEQ         CR2                 ; loop until tC=1
  667.  
  668.         ANDA        #$7F                ; mask parity
  669.         STAA        SCDAT               ; send character
  670.  
  671.         JMP         NEXT
  672. *
  673. *=======>> 17 <<    CMOVE             ; source, destination, count
  674. *
  675.         FCB         $85
  676.         FCC         'CMOV'
  677.         FCB         $C5
  678.         FDB         CR-5
  679. CMOVE   FDB         *+2               ;
  680.         LDX         #N                ; find temp storage area
  681.         LDAB        #6                ; byte count
  682. *
  683. *                   n = count ; n+2 = destination ; n+4 = source
  684. *
  685. CMOV1   PULA                          ; pop 6 bytes off stack
  686.         STAA        0,X               ; move parameters to scratch area
  687.         INX                           ;
  688.         DECB
  689.         BNE         CMOV1
  690.  
  691. CMOV2   LDD         N                 ; get count
  692.         SUBD        #1                ; subtract one
  693.         STD         N                 ; save count
  694.         BCS         CMOV3             ; we be done ?
  695.  
  696.         LDX         N+4               ; get source address
  697.         LDAA        0,X               ; get source data
  698.         INX
  699.         STX         N+4               ; save source pointer
  700.  
  701.         LDX         N+2               ; get destination pointer
  702.         STAA        0,X               ; write it to destination
  703.         INX
  704.         STX         N+2               ; save destination pointer
  705.  
  706. _CMOV2  BRA         CMOV2
  707.  
  708. CMOV3   JMP         NEXT
  709. *
  710. *=======>> 18 <<    U*
  711. *
  712.         FCB         $82
  713.         FCC         'U'
  714.         FCB         $AA
  715.         FDB         CMOVE-8
  716. USTAR   FDB         *+2
  717.  
  718.         LDAA        #16               ; bits/word counter
  719.         PSHA
  720.         CLRA
  721.         CLRB
  722.         TSX
  723. USTAR2  ROR         3,X               ; shift multiplier
  724.         ROR         4,X
  725.         DEC         0,X               ; done ?
  726.         BMI         USTAR4            ; yes
  727.  
  728.         BCC         USTAR3
  729.         ADDD        1,X
  730. USTAR3  RORA
  731.         RORB                          ; shift result
  732.         BRA         USTAR2
  733.  
  734. USTAR4  INS                           ; dump counter
  735.  
  736.         INS
  737.         INS
  738.         JMP         PUSHBA            ; leave high word
  739. *
  740. *
  741. *
  742. *=======>> 19 <<    U/
  743. *
  744.         FCB         $82
  745.         FCC         'U'
  746.         FCB         $AF
  747.         FDB         USTAR-5
  748. USLASH  FDB         *+2
  749.         LDAA        #17
  750.         PSHA
  751.         TSX
  752.         LDD         3,X
  753. USL1    CMPA        1,X
  754.         BHI         USL3
  755.         BCS         USL2
  756.         CMPB        2,X
  757.         BCC         USL3
  758. USL2    CLC
  759.         BRA         USL4
  760. USL3    SUBD        1,X
  761.         SEC
  762. USL4    ROL         6,X
  763.         ROL         5,X
  764.         DEC         0,X
  765.         BEQ         USL5
  766.         ROLB
  767.         ROLA
  768.         BCC         USL1
  769.         BRA         USL3
  770. USL5    INS
  771.         INS
  772.         INS
  773.         INS
  774.         INS
  775.         JMP         SWAP+4            ; reverse quotient and remainder
  776. *
  777. *=======>> 20 <<    AND
  778. *
  779.         FCB         $83
  780.         FCC         'AN'
  781.         FCB         $C4
  782.         FDB         USLASH-5
  783. AND     FDB         *+2
  784.         PULA                          ; pop data off stack
  785.         PULB
  786.         TSX                           ; copy stack pointer
  787.         ANDB        1,X               ; AND the D acc with data on stack
  788.         ANDA        0,X
  789.         JMP         STABX             ; go save result
  790. *
  791. *=======>> 21 <<    OR
  792. *
  793.         FCB         $82
  794.         FCC         'O'
  795.         FCB         $D2
  796.         FDB         AND-6
  797. OR      FDB         *+2
  798.         PULA                          ; pop data off stack
  799.         PULB
  800.         TSX                           ; copy stack pointer
  801.         ORAB        1,X               ; OR the D acc with data on stack
  802.         ORAA        0,X
  803.         JMP         STABX             ; go save result
  804. *
  805. *=======>> 22 <<    XOR
  806. *
  807.         FCB         $83
  808.         FCC         'XO'
  809.         FCB         $D2
  810.         FDB         OR-5
  811. XOR     FDB         *+2
  812.         PULA                          ; pop data
  813.         PULB
  814.         TSX                           ; copy stack pointer
  815.         EORB        1,X               ; XOR the D acc with data on stack
  816.         EORA        0,X
  817.         JMP         STABX             ; go save result
  818. *
  819. *                   SP@
  820. *
  821.         FCB         $83
  822.         FCC         'SP'
  823.         FCB         $C0
  824.         FDB         XOR-6
  825. SPAT    FDB         *+2
  826.         TSX                           ; copy stack pointer
  827.         STX         N                 ; save in scratch area
  828.         LDX         #N                ; this doesn@@t make sense to me !!
  829.         JMP         GETX
  830. *
  831. *=======>> 24 <<    SP!
  832. *
  833.         FCB         $83
  834.         FCC         'SP'
  835.         FCB         $A1
  836.         FDB         SPAT-6
  837. SPSTOR  FDB         *+2
  838.         LDX         UP                ; get user pointer
  839.         LDX         XSPZER-UORIG,X    ; find initialization value for sp
  840.         TXS                           ; watch it! X and S are not equal
  841.         JMP         NEXT
  842. *
  843. *=======>> 25 <<    RP!
  844. *
  845.         FCB         $83
  846.         FCC         'RP'
  847.         FCB         $A1
  848.         FDB         SPSTOR-6
  849. RPSTOR  FDB         *+2
  850.         LDX         RINIT             ; initialize from rom constant
  851.         STX         RP                ; save new return pointer
  852.         JMP         NEXT
  853. *
  854. *=======>> 26 <<    ;S
  855. *
  856.         FCB         $82
  857.         FCC         ';'                 
  858.         FCB         $D3
  859.         FDB         RPSTOR-6
  860. SEMIS   FDB         *+2
  861.         LDX         RP                ; get return pointer
  862.         INX
  863.         INX
  864.         STX         RP                ;
  865.         LDX         0,X               ; get address we have just finished
  866.         JMP         NEXT+2            ; increment the return address & do next word
  867. *
  868. *=======>> 27 <<    LEAVE
  869. *
  870.         FCB         $85
  871.         FCC         'LEAV'
  872.         FCB         $C5
  873.         FDB         SEMIS-5
  874. LEAVE   FDB         *+2
  875.         LDX         RP                ;
  876.         LDD         2,X
  877.         STD         4,X               ;
  878.         JMP         NEXT
  879. *
  880. *=======>> 28 <<    >R
  881. *
  882.         FCB         $82
  883.         FCC         '>'
  884.         FCB         $D2
  885.         FDB         LEAVE-8
  886. TOR     FDB         *+2
  887.         LDX         RP                ; find return stack
  888.         DEX                           ; make room on return stack
  889.         DEX
  890.         STX         RP                ;
  891.         PULA                          ; pop data
  892.         PULB
  893.         STD         2,X               ; and save on return stack
  894.         JMP         NEXT
  895. *
  896. *=======>> 29 <<    R>
  897. *
  898.         FCB         $82
  899.         FCC         'R'
  900.         FCB         $BE
  901.         FDB         TOR-5
  902. FROMR   FDB         *+2
  903.         LDX         RP                ; find return stack
  904.         LDD         2,X               ; get data
  905.         INX                           ; toss out 2 bytes
  906.         INX
  907.         STX         RP                ; save pointer
  908.         JMP         PUSHBA            ; push data back on stack
  909. *
  910. *=======>> 30 <<    R
  911. *
  912.         FCB         $81               ; R
  913.         FCB         $D2
  914.         FDB         FROMR-5
  915. R       FDB         *+2
  916.         LDX         RP                ; find pointer
  917.         INX
  918.         INX
  919.         JMP         GETX              ; copy data and push on data stack
  920. *
  921. *=======>> 31 <<    0=
  922. *
  923.         FCB         $82
  924.         FCC         '0'
  925.         FCB         $BD
  926.         FDB         R-4
  927. ZEQU    FDB         *+2
  928.         TSX                           ; copy stack pointer
  929.         CLRA
  930.         CLRB
  931.         LDX         0,X               ; now get data off stack
  932.         BNE         ZEQU2             ; not zero so leave false flag
  933.         INCB                          ; it is zero so leave true flag
  934.  
  935. ZEQU2   TSX                           ;
  936.         JMP         STABX             ; save flag
  937. *
  938. *=======>> 32 <<    0<
  939. *
  940.         FCB         $82
  941.         FCC         '0'
  942.         FCB         $BC
  943.         FDB         ZEQU-5
  944. ZLESS   FDB         *+2
  945.         TSX                           ; copy stack pointer
  946.         LDAA        #$80              ; check the sign bit
  947.         ANDA        0,X               ;
  948.         BEQ         ZLESS2
  949.         CLRA                          ; if negative
  950.         LDAB        #1                ; leave true flag as it is less than zero
  951.         JMP         STABX
  952.  
  953. ZLESS2  CLRB                          ; leave false - it@@s greater than zero
  954.         JMP         STABX
  955. *
  956. *=======>> 33 <<    +
  957. *
  958.         FCB         $81               ; +
  959.         FCB         $AB
  960.         FDB         ZLESS-5
  961. PLUS    FDB         *+2
  962.         PULA                          ; pop data
  963.         PULB
  964.         TSX                           ; copy stack pointer
  965.         ADDD        0,X               ; add two words
  966.         JMP         STABX             ; and leave result on stack
  967. *
  968. *=======>> 34 <<    D+
  969. *
  970.         FCB         $82
  971.         FCC         'D'
  972.         FCB         $AB
  973.         FDB         PLUS-4
  974. DPLUS   FDB         *+2
  975.         TSX                           ; copy stack pointer
  976.         CLC
  977.         LDAB        #4                ; double word is 4 bytes
  978. DPLUS2  LDAA        3,X               ; point to byte of bottom
  979.         ADCA        7,X               ; add to byte of top
  980.         STAA        7,X               ; save result
  981.         DEX                           ;
  982.         DECB                          ; knock down count
  983.         BNE         DPLUS2            ; do until 4 bytes complete
  984.         INS                           ; toss 2 words
  985.         INS
  986.         INS
  987.         INS
  988.         JMP         NEXT              ;
  989. *
  990. *=======>> 35 <<    MINUS             ; change sign of word on stack
  991. *
  992.         FCB         $85
  993.         FCC         'MINU'
  994.         FCB         $D3
  995.         FDB         DPLUS-5
  996. MINUS   FDB         *+2
  997.         TSX                           ; copy stack pointer
  998.         NEG         1,X               ; negate bottom byte
  999.         BCS         MINUS2
  1000.         NEG         0,X               ; negate upper byte
  1001.         BRA         MINUS3
  1002. MINUS2  COM         0,X               ;
  1003. MINUS3  JMP         NEXT
  1004. *
  1005. *=======>> 36 <<    DMINUS            ; change sign of double word on stack
  1006. *
  1007.         FCB         $86
  1008.         FCC         'DMINU'
  1009.         FCB         $D3
  1010.         FDB         MINUS-8
  1011. DMINUS  FDB         *+2
  1012.         TSX                           ; copy stack pointer
  1013.         COM         0,X
  1014.         COM         1,X
  1015.         COM         2,X
  1016.         NEG         3,X
  1017.  
  1018.         BNE         DMINX             ; figure this out later
  1019.         INC         2,X
  1020.         BNE         DMINX
  1021.         INC         1,X
  1022.         BNE         DMINX
  1023.         INC         0,X
  1024. DMINX   JMP         NEXT
  1025. *
  1026. *=======>> 37 <<    OVER
  1027. *
  1028.         FCB         $84
  1029.         FCC         'OVE'
  1030.         FCB         $D2
  1031.         FDB         DMINUS-9
  1032. OVER    FDB         *+2
  1033.         TSX                           ; copy stack pointer
  1034.         LDD         2,X               ; get second word on stack
  1035.         JMP         PUSHBA            ; and copy it to top
  1036. *
  1037. *=======>> 38 <<    DROP
  1038. *
  1039.         FCB         $84
  1040.         FCC         'DRO'
  1041.         FCB         $D0
  1042.         FDB         OVER-7
  1043. DROP    FDB         *+2
  1044.         INS                           ; knock sp twice
  1045.         INS                           ; to remove top item froom stack
  1046.         JMP         NEXT
  1047. *
  1048. *=======>> 39 <<    SWAP
  1049. *
  1050.         FCB         $84
  1051.         FCC         'SWA'
  1052.         FCB         $D0
  1053.         FDB         DROP-7
  1054. SWAP    FDB         *+2
  1055.         PULA                          ; get top item of stack
  1056.         PULB
  1057.         TSX                           ; copy sp
  1058.         LDX         0,X               ; copy second item
  1059.         INS
  1060.         INS
  1061.         PSHB                          ; save top item as second item
  1062.         PSHA
  1063.         STX         N                 ; now go save second as top
  1064.         LDX         #N
  1065.         JMP         GETX
  1066. *
  1067. *=======>> 40 <<    DUP
  1068. *
  1069.         FCB         $83
  1070.         FCC         'DU'
  1071.         FCB         $D0
  1072.         FDB         SWAP-7
  1073. DUP     FDB         *+2
  1074.         PULA                          ; get data
  1075.         PULB
  1076.         PSHB                          ; push data
  1077.         PSHA
  1078.         JMP         PUSHBA            ; push it again to duplicate
  1079. *
  1080. *=======>> 41 <<    +!
  1081. *
  1082.         FCB         $82
  1083.         FCC         '+'
  1084.         FCB         $A1
  1085.         FDB         DUP-6
  1086. PSTORE  FDB         *+2
  1087.         TSX                           ; copy stack pointer
  1088.         LDX         0,X               ; get address
  1089.         INS
  1090.         INS
  1091.         PULA                          ; get data from stack
  1092.         PULB
  1093.         ADDB        1,X               ; add and store low byte
  1094.         STAB        1,X
  1095.         ADCA        0,X               ; add and store high byte
  1096.         STAA        0,X
  1097.         JMP         NEXT
  1098. *
  1099. *=======>> 42 <<    TOGGLE
  1100. *
  1101.         FCB         $86
  1102.         FCC         'TOGGL'
  1103.         FCB         $C5
  1104.         FDB         PSTORE-5
  1105. TOGGLE  FDB         DOCOL,OVER,CAT,XOR,SWAP,CSTORE
  1106.         FDB         SEMIS
  1107. *
  1108. *=======>> 43 <<    @
  1109. *
  1110.         FCB         $81               ; @
  1111.         FCB         $C0
  1112.         FDB         TOGGLE-9
  1113. AT      FDB         *+2
  1114.         TSX                           ; copy sp
  1115.         LDX         0,X               ; get address
  1116.         INS
  1117.         INS
  1118.         JMP         GETX              ; get 16 bit data from address
  1119. *
  1120. *=======>> 44 <<    C@
  1121. *
  1122.         FCB         $82
  1123.         FCC         'C'
  1124.         FCB         $C0
  1125.         FDB         AT-4
  1126. CAT     FDB         *+2
  1127.         TSX                           ; copy sp
  1128.         LDX         0,X               ; get address
  1129.         CLRA                          ; make upper byte zero
  1130.         LDAB        0,X               ; get 8 bit data from address
  1131.         INS
  1132.         INS
  1133.         JMP         PUSHBA            ; and save on stack
  1134. *
  1135. *=======>> 45 <<    !
  1136. *
  1137.         FCB         $81               ; !
  1138.         FCB         $A1
  1139.         FDB         CAT-5
  1140. STORE   FDB         *+2
  1141.         TSX
  1142.         LDX         0,X               ; get address
  1143.         INS
  1144.         INS
  1145.         JMP         PULABX            ; then get data and store at addr
  1146. *
  1147. *=======>> 46 <<    C!
  1148. *
  1149.         FCB         $82
  1150.         FCC         'C'
  1151.         FCB         $A1
  1152.         FDB         STORE-4
  1153. CSTORE  FDB         *+2
  1154.         TSX                           ; copy stack pointer
  1155.         LDX         0,X               ; get address
  1156.         INS
  1157.         INS
  1158.         INS
  1159.         PULB                          ; get 8 bit data
  1160.         STAB        0,X               ; and store it
  1161.         JMP         NEXT
  1162. *
  1163. *=======>> 47 <<    :
  1164. *
  1165.         FCB         $C1
  1166.         FCB         $BA
  1167.         FDB         CSTORE-5
  1168. COLON   FDB         DOCOL,QEXEC,SCSP,CURENT,AT,CONTXT,STORE
  1169.         FDB         CREATE,RBRAK
  1170.         FDB         PSCODE
  1171. *
  1172. *                   here is the IP pusher for allowing nested words
  1173. *                   in the virtual machine
  1174. *                   ( ;S is the equivalent un-nester)
  1175. *
  1176. *
  1177. DOCOL   LDX         RP                ; make room in the stack
  1178.         DEX
  1179.         DEX
  1180.         STX         RP
  1181.         LDD         IP                ; get instruction pointer
  1182.         STD         2,X               ; store address of the high level word
  1183.         LDX         W                 ; get first sub-word of that definition
  1184.         JMP         NEXT+2            ; and execute it
  1185. *
  1186. *       >> 48 <<    ;
  1187. *
  1188.         FCB         $C1               ; immediate code
  1189.         FCB         $BB
  1190.         FDB         COLON-4
  1191. SEMI    FDB         DOCOL,QCSP,COMPIL,SEMIS,SMUDGE,LBRAK
  1192.         FDB         SEMIS
  1193. *
  1194. *=======>> 49 <<    CONSTANT
  1195. *
  1196.         FCB         $88
  1197.         FCC         'CONSTAN'
  1198.         FCB         $D4
  1199.         FDB         SEMI-4
  1200. CON     FDB         DOCOL,CREATE,SMUDGE,COMMA,PSCODE
  1201. DOCON   LDX         W                 ; pointer
  1202.         LDD         2,X               ; get constant data
  1203.         JMP         PUSHBA            ; and save it
  1204. *
  1205. *=======>> 50 <<    VARIABLE
  1206. *
  1207.         FCB         $88
  1208.         FCC         'VARIABL'
  1209.         FCB         $C5
  1210.         FDB         CON-11
  1211. VAR     FDB         DOCOL,CON,PSCODE
  1212. DOVAR   LDD         W                 ; pointer to parameter field
  1213.         ADDD        #2                ; A:B now contain the address of the variable
  1214.         JMP         PUSHBA
  1215. *
  1216. *=======>> 51 <<    USER
  1217. *
  1218.         FCB         $84
  1219.         FCC         'USE'
  1220.         FCB         $D2
  1221.         FDB         VAR-11
  1222. USER    FDB         DOCOL,CON,PSCODE
  1223. DOUSER  LDX         W                 ; get offset into user@@s table
  1224.         LDD         2,X
  1225.         ADDD        UP
  1226.         JMP         PUSHBA            ; push address of user@@s variable
  1227. *
  1228. *=======>> 52 <<    0
  1229. *
  1230.         FCB         $81               ; 0
  1231.         FCB         $B0
  1232.         FDB         USER-7
  1233. ZERO    FDB         DOCON
  1234.         FDB         0000
  1235. *
  1236. *=======>> 53 <<    1
  1237. *
  1238.         FCB         $81               ; 1
  1239.         FCB         $B1
  1240.         FDB         ZERO-4
  1241. ONE     FDB         DOCON
  1242.         FDB         1
  1243. *
  1244. *=======>> 54 <<    2
  1245. *
  1246.         FCB         $81               ; 2
  1247.         FCB         $B2
  1248.         FDB         ONE-4
  1249. TWO     FDB         DOCON
  1250.         FDB         2
  1251. *
  1252. *=======>> 55 <<    3
  1253. *
  1254.         FCB         $81               ;3
  1255.         FCB         $B3
  1256.         FDB         TWO-4
  1257. THREE   FDB         DOCON
  1258.         FDB         3
  1259. *
  1260. *=======>> 56 <<    BL
  1261. *
  1262.         FCB         $82
  1263.         FCC         'B'
  1264.         FCB         $CC
  1265.         FDB         THREE-4
  1266. BL      FDB         DOCON             ; ascii blank
  1267.         FDB         $20
  1268.  
  1269. *
  1270. *=======>> 57 <<    FIRST
  1271. *
  1272.         FCB         $85
  1273.         FCC         'FIRS'
  1274.         FCB         $D4
  1275.         FDB         BL-5
  1276. FIRST   FDB         DOCON
  1277.         FDB         RAMTOP            ;
  1278. *
  1279. *=======>> 58 <<    LIMIT             ; the end of memory +1
  1280. *
  1281.         FCB         $85
  1282.         FCC         'LIMI'
  1283.         FCB         $D4
  1284.         FDB         FIRST-8
  1285. LIMIT   FDB         DOCON
  1286.         FDB         MEMEND            ;
  1287. *
  1288. *=======>> 59 <<    B/BUF             ; 256 bytes/buffer
  1289. *
  1290.         FCB         $85
  1291.         FCC         'B/BU'
  1292.         FCB         $C6
  1293.         FDB         LIMIT-8
  1294. BBUF    FDB         DOCON
  1295.         FDB         256
  1296. *
  1297. *=======>> 60 <<    B/SCR             ; blocks/screen = 1024/(B/BUF) = 4
  1298. *                                     ;
  1299.         FCB         $85
  1300.         FCC         'B/SC'
  1301.         FCB         $D2
  1302.         FDB         BBUF-8
  1303. BSCR    FDB         DOCON
  1304.         FDB         4
  1305. *
  1306. *=======>> 61 <<    +ORIGIN
  1307. *
  1308.         FCB         $87
  1309.         FCC         '+ORIGI'
  1310.         FCB         $CE
  1311.         FDB         BSCR-8
  1312. PORIG   FDB         DOCOL,LIT,ORIG,PLUS
  1313.         FDB         SEMIS
  1314. *
  1315. *=======>> 62 <<    S0
  1316. *
  1317.         FCB         $82
  1318.         FCC         'S'
  1319.         FCB         $B0
  1320.         FDB         PORIG-10
  1321. SZERO   FDB         DOUSER
  1322.         FDB         XSPZER-UORIG
  1323. *
  1324. *=======>> 63 <<    R0
  1325. *
  1326.         FCB         $82
  1327.         FCC         'R'
  1328.         FCB         $B0
  1329.         FDB         SZERO-5
  1330. RZERO   FDB         DOUSER
  1331.         FDB         XRZERO-UORIG
  1332. *
  1333. *=======>> 64 <<    TIB
  1334. *
  1335.         FCB         $83
  1336.         FCC         'TI'
  1337.         FCB         $C2
  1338.         FDB         RZERO-5
  1339. TIB     FDB         DOUSER
  1340.         FDB         XTIB-UORIG
  1341. *
  1342. *=======>> 65 <<    WIDTH
  1343. *
  1344.         FCB         $85
  1345.         FCC         'WIDT'
  1346.         FCB         $C8
  1347.         FDB         TIB-6
  1348. WIDTH   FDB         DOUSER
  1349.         FDB         XWIDTH-UORIG
  1350. *
  1351. *=======>> 66 <<    WARNING
  1352. *
  1353.         FCB         $87
  1354.         FCC         'WARNIN'
  1355.         FCB         $C7
  1356.         FDB         WIDTH-8
  1357. WARN    FDB         DOUSER
  1358.         FDB         XWARN-UORIG
  1359. *
  1360. *=======>> 67 <<    FENCE
  1361. *
  1362.         FCB         $85
  1363.         FCC         'FENC'
  1364.         FCB         $C5
  1365.         FDB         WARN-10
  1366. FENCE   FDB         DOUSER
  1367.         FDB         XFENCE-UORIG
  1368. *
  1369. *=======>> 68       DP                pointer to first free
  1370. *                                     byte at end of dictionary
  1371. *
  1372.         FCB         $82
  1373.         FCC         'D'
  1374.         FCB         $D0
  1375.         FDB         FENCE-8
  1376. DP      FDB         DOUSER
  1377.         FDB         XDP-UORIG
  1378. *
  1379. *=======>> 68.5 <<  VOC-LINK
  1380. *
  1381.         FCB         $88
  1382.         FCC         'VOC-LIN'
  1383.         FCB         $CB
  1384.         FDB         DP-5
  1385. VOCLIN  FDB         DOUSER
  1386.         FDB         XVOCL-UORIG
  1387. *
  1388. *=======>> 69 <<    BLK
  1389. *
  1390.         FCB         $83
  1391.         FCC         'BL'
  1392.         FCB         $CB
  1393.         FDB         VOCLIN-11
  1394. BLK     FDB         DOUSER
  1395.         FDB         XBLK-UORIG
  1396. *
  1397. *=======>> 70 <<    IN                ; scan pointer for input line buffer
  1398. *
  1399.         FCB         $82
  1400.         FCC         'I'
  1401.         FCB         $CE
  1402.         FDB         BLK-6
  1403. IN      FDB         DOUSER
  1404.         FDB         XIN-UORIG
  1405. *
  1406. *=======>> 71 <<    OUT
  1407. *
  1408.         FCB         $83
  1409.         FCC         'OU'
  1410.         FCB         $D4
  1411.         FDB         IN-5
  1412. OUT     FDB         DOUSER
  1413.         FDB         XOUT-UORIG
  1414. *
  1415. *=======>> 72 <<    SCR
  1416. *
  1417.         FCB         $83
  1418.         FCC         'SC'
  1419.         FCB         $D2
  1420.         FDB         OUT-6
  1421. SCR     FDB         DOUSER
  1422.         FDB         XSCR-UORIG
  1423. *
  1424. *=======>> 73 <<    OFFSET
  1425. *
  1426.         FCB         $86
  1427.         FCC         'OFFSE'
  1428.         FCB         $D4
  1429.         FDB         SCR-6
  1430. OFSET   FDB         DOUSER
  1431.         FDB         XOFSET-UORIG
  1432. *
  1433. *=======>> 74 <<    CONTEXT           ; points to pointer to
  1434. *                                     ; vocabulary to search first
  1435.         FCB         $87
  1436.         FCC         'CONTEX'
  1437.         FCB         $D4
  1438.         FDB         OFSET-9
  1439. CONTXT  FDB         DOUSER
  1440.         FDB         XCONT-UORIG
  1441. *
  1442. *=======>> 75 <<    CURRENT           ; points to pointer to
  1443. *                                     ; vocabulary being extended
  1444.         FCB         $87
  1445.         FCC         'CURREN'
  1446.         FCB         $D4
  1447.         FDB         CONTXT-10
  1448. CURENT  FDB         DOUSER
  1449.         FDB         XCURR-UORIG
  1450. *
  1451. *=======>> 76 <<    STATE             ; 1 if compiling, 0 if not
  1452. *
  1453.         FCB         $85
  1454.         FCC         'STAT'
  1455.         FCB         $C5
  1456.         FDB         CURENT-10
  1457. STATE   FDB         DOUSER
  1458.         FDB         XSTATE-UORIG
  1459. *
  1460. *=======>> 77 <<    BASE                ; number base for all input and output
  1461. *
  1462.         FCB         $84
  1463.         FCC         'BAS'
  1464.         FCB         $C5
  1465.         FDB         STATE-8
  1466. BASE    FDB         DOUSER
  1467.         FDB         XBASE-UORIG
  1468. *
  1469. *=======>> 78 <<    DPL
  1470. *
  1471.         FCB         $83
  1472.         FCC         'DP'
  1473.         FCB         $CC
  1474.         FDB         BASE-7
  1475. DPL     FDB         DOUSER
  1476.         FDB         XDPL-UORIG
  1477. *
  1478. *=======>> 79 <<    FLD
  1479. *
  1480.         FCB         $83
  1481.         FCC         'FL'
  1482.         FCB         $C4
  1483.         FDB         DPL-6
  1484. FLD     FDB         DOUSER
  1485.         FDB         XFLD-UORIG
  1486. *
  1487. *=======>> 80 <<    CSP
  1488. *
  1489.         FCB         $83
  1490.         FCC         'CS'
  1491.         FCB         $D0
  1492.         FDB         FLD-6
  1493. CSP     FDB         DOUSER
  1494.         FDB         XCSP-UORIG
  1495. *
  1496. *=======>> 81 <<    R#
  1497. *
  1498.         FCB         $82
  1499.         FCC         'R'
  1500.         FCB         $A3
  1501.         FDB         CSP-6
  1502. RNUM    FDB         DOUSER
  1503.         FDB         XRNUM-UORIG
  1504. *
  1505. *=======>> 82 <<    HLD
  1506. *
  1507.         FCB         $83
  1508.         FCC         'HL'
  1509.         FCB         $C4
  1510.         FDB         RNUM-5
  1511. HLD     FDB         DOCON
  1512.         FDB         XHLD
  1513. *
  1514. *=======>> 82.5 <<  COLUMNS             ; line width of terminal
  1515. *
  1516.         FCB         $87
  1517.         FCC         'COLUMN'
  1518.         FCB         $D3
  1519.         FDB         HLD-6
  1520. COLUMS  FDB         DOUSER
  1521.         FDB         XCOLUM-UORIG
  1522. *
  1523. *=======>> 83 <<    1+
  1524. *
  1525.         FCB         $82
  1526.         FCC         '1'
  1527.         FCB         $AB
  1528.         FDB         COLUMS-10
  1529. ONEP    FDB         DOCOL,ONE,PLUS
  1530.         FDB         SEMIS
  1531. *
  1532. *=======>> 84 <<    2+
  1533. *
  1534.         FCB         $82
  1535.         FCC         '2'
  1536.         FCB         $AB
  1537.         FDB         ONEP-5
  1538. TWOP    FDB         DOCOL,TWO,PLUS
  1539.         FDB         SEMIS
  1540. *
  1541. *=======>> 85 <<    HERE
  1542. *
  1543.         FCB         $84
  1544.         FCC         'HER'
  1545.         FCB         $C5
  1546.         FDB         TWOP-5
  1547. HERE    FDB         DOCOL,DP,AT
  1548.         FDB         SEMIS
  1549. *
  1550. *=======>> 86 <<    ALLOT
  1551. *
  1552.         FCB         $85
  1553.         FCC         'ALLO'
  1554.         FCB         $D4
  1555.         FDB         HERE-7
  1556. ALLOT   FDB         DOCOL,DP,PSTORE
  1557.         FDB         SEMIS
  1558. *
  1559. *=======>> 87 <<    ,                   ( this is a comma )
  1560. *
  1561.         FCB         $81                 ; , (comma)
  1562.         FCB         $AC
  1563.         FDB         ALLOT-8
  1564. COMMA   FDB         DOCOL,HERE,STORE,TWO,ALLOT
  1565.         FDB         SEMIS
  1566. *
  1567. *=======>> 88 <<    C,
  1568. *
  1569.         FCB         $82
  1570.         FCC         'C'
  1571.         FCB         $AC
  1572.         FDB         COMMA-4
  1573. CCOMM   FDB         DOCOL,HERE,CSTORE,ONE,ALLOT
  1574.         FDB         SEMIS
  1575. *
  1576. *=======>> 89 <<    -                 ( minus sign )
  1577. *
  1578.         FCB         $81               ; -
  1579.         FCB         $AD
  1580.         FDB         CCOMM-5
  1581. SUB     FDB         DOCOL,MINUS,PLUS
  1582.         FDB         SEMIS
  1583. *
  1584. *=======>> 90 <<    =                 ( equals sign )
  1585. *
  1586.         FCB         $81               ; =
  1587.         FCB         $BD
  1588.         FDB         SUB-4
  1589. EQUAL   FDB         DOCOL,SUB,ZEQU
  1590.         FDB         SEMIS
  1591. *
  1592. *=======>> 91 <<    <                 ( left arrow )
  1593. *
  1594.         FCB         $81               ; <
  1595.         FCB         $BC
  1596.         FDB         EQUAL-4
  1597. LESS    FDB         *+2
  1598.         PULA                          ; pop data
  1599.         PULB
  1600.         TSX                           ; copy stack pointer
  1601.         CMPA        0,X               ; compare upper bytes
  1602.         INS
  1603.         BGT         LESST             ;
  1604.         BNE         LESSF
  1605.         CMPB        1,X
  1606.         BHI         LESST
  1607. LESSF   CLRB                          ; set flag false
  1608.         BRA         LESSX
  1609. LESST   LDAB        #1                ; set flag true
  1610. LESSX   CLRA
  1611.         INS
  1612.         JMP         PUSHBA
  1613. *
  1614. *=======>> 92 <<    >                 ( right arrow )
  1615. *
  1616.         FCB         $81               ; >
  1617.         FCB         $BE
  1618.         FDB         LESS-4
  1619. GREAT   FDB         DOCOL,SWAP,LESS
  1620.         FDB         SEMIS
  1621. *
  1622. *=======>> 93 <<    ROT
  1623. *
  1624.         FCB         $83
  1625.         FCC         'RO'
  1626.         FCB         $D4
  1627.         FDB         GREAT-4
  1628. ROT     FDB         DOCOL,TOR,SWAP,FROMR,SWAP
  1629.         FDB         SEMIS
  1630. *
  1631. *=======>> 94 <<    SPACE
  1632. *
  1633.         FCB         $85
  1634.         FCC         'SPAC'
  1635.         FCB         $C5
  1636.         FDB         ROT-6
  1637. SPACE   FDB         DOCOL,BL,EMIT
  1638.         FDB         SEMIS
  1639. *
  1640. *=======>> 95 <<    MIN
  1641. *
  1642.         FCB         $83
  1643.         FCC         'MI'
  1644.         FCB         $CE
  1645.         FDB         SPACE-8
  1646. MIN     FDB         DOCOL,OVER,OVER,GREAT,ZBRAN
  1647.         FDB         MIN2-*
  1648.         FDB         SWAP
  1649. MIN2    FDB         DROP
  1650.         FDB         SEMIS
  1651. *
  1652. *=======>> 96 <<    MAX
  1653. *
  1654.         FCB         $83
  1655.         FCC         'MA'
  1656.         FCB         $D8
  1657.         FDB         MIN-6
  1658. MAX     FDB         DOCOL,OVER,OVER,LESS,ZBRAN
  1659.         FDB         MAX2-*
  1660.         FDB         SWAP
  1661. MAX2    FDB         DROP
  1662.         FDB         SEMIS
  1663. *
  1664. *=======>> 97 <<    -DUP
  1665. *
  1666.         FCB         $84
  1667.         FCC         '-DU'
  1668.         FCB         $D0
  1669.         FDB         MAX-6
  1670. DDUP    FDB         DOCOL,DUP,ZBRAN
  1671.         FDB         DDUP2-*
  1672.         FDB         DUP
  1673. DDUP2   FDB         SEMIS
  1674. *
  1675. *=======>> 98 <<    TRAVERSE
  1676. *
  1677.         FCB         $88
  1678.         FCC         'TRAVERS'
  1679.         FCB         $C5
  1680.         FDB         DDUP-7
  1681. TRAV    FDB         DOCOL,SWAP
  1682. TRAV2   FDB         OVER,PLUS,LIT
  1683.         FDB         $7F
  1684.         FDB         OVER,CAT,LESS,ZBRAN
  1685.         FDB         TRAV2-*
  1686.         FDB         SWAP,DROP
  1687.         FDB         SEMIS
  1688. *
  1689. *=======>> 99 <<    LATEST
  1690. *
  1691.         FCB         $86
  1692.         FCC         'LATES'
  1693.         FCB         $D4
  1694.         FDB         TRAV-11
  1695. LATEST  FDB         DOCOL,CURENT,AT,AT
  1696.         FDB         SEMIS
  1697. *
  1698. *=======>> 100 <<   LFA
  1699. *
  1700.         FCB         $83
  1701.         FCC         'LF'
  1702.         FCB         $C1
  1703.         FDB         LATEST-9
  1704. LFA     FDB         DOCOL,LIT
  1705.         FDB         4
  1706.         FDB         SUB
  1707.         FDB         SEMIS
  1708. *
  1709. *=======>> 101 <<   CFA
  1710. *
  1711.         FCB         $83
  1712.         FCC         'CF'
  1713.         FCB         $C1
  1714.         FDB         LFA-6
  1715. CFA     FDB         DOCOL,TWO,SUB
  1716.         FDB         SEMIS
  1717. *
  1718. *=======>> 102 <<   NFA
  1719. *
  1720.         FCB         $83
  1721.         FCC         'NF'
  1722.         FCB         $C1
  1723.         FDB         CFA-6
  1724. NFA     FDB         DOCOL,LIT
  1725.         FDB         5
  1726.         FDB         SUB,ONE,MINUS,TRAV
  1727.         FDB         SEMIS
  1728. *
  1729. *=======>> 103 <<   PFA
  1730. *
  1731.         FCB         $83
  1732.         FCC         'PF'
  1733.         FCB         $C1
  1734.         FDB         NFA-6
  1735. PFA     FDB         DOCOL,ONE,TRAV,LIT
  1736.         FDB         5
  1737.         FDB         PLUS
  1738.         FDB         SEMIS
  1739. *
  1740. *=======>> 104 <<   !CSP
  1741. *
  1742.         FCB         $84
  1743.         FCC         '!CS'
  1744.         FCB         $D0
  1745.         FDB         PFA-6
  1746. SCSP    FDB         DOCOL,SPAT,CSP,STORE
  1747.         FDB         SEMIS
  1748. *
  1749. *=======>> 105 <<   ?ERROR
  1750. *
  1751.         FCB         $86
  1752.         FCC         '?ERRO'
  1753.         FCB         $D2
  1754.         FDB         SCSP-7
  1755. QERR    FDB         DOCOL,SWAP,ZBRAN
  1756.         FDB         QERR2-*
  1757.         FDB         ERROR,BRAN
  1758.         FDB         QERR3-*
  1759. QERR2   FDB         DROP
  1760. QERR3   FDB         SEMIS
  1761. *
  1762. *=======>> 106 <<   ?COMP
  1763. *
  1764.         FCB         $85
  1765.         FCC         '?COM'
  1766.         FCB         $D0
  1767.         FDB         QERR-9
  1768. QCOMP   FDB         DOCOL,STATE,AT,ZEQU,LIT
  1769.         FDB         $11
  1770.         FDB         QERR
  1771.         FDB         SEMIS
  1772. *
  1773. *=======>> 107 <<   ?EXEC
  1774. *
  1775.         FCB         $85
  1776.         FCC         '?EXE'
  1777.         FCB         $C3
  1778.         FDB         QCOMP-8
  1779. QEXEC   FDB         DOCOL,STATE,AT,LIT
  1780.         FDB         $12
  1781.         FDB         QERR
  1782.         FDB         SEMIS
  1783. *
  1784. *=======>> 108 <<   ?PAIRS
  1785. *
  1786.         FCB         $86
  1787.         FCC         '?PAIR'
  1788.         FCB         $D3
  1789.         FDB         QEXEC-8
  1790. QPAIRS  FDB         DOCOL,SUB,LIT
  1791.         FDB         $13
  1792.         FDB         QERR
  1793.         FDB         SEMIS
  1794. *
  1795. *=======>> 109 <<   ?CSP
  1796. *
  1797.         FCB         $84
  1798.         FCC         '?CS'
  1799.         FCB         $D0
  1800.         FDB         QPAIRS-9
  1801. QCSP    FDB         DOCOL,SPAT,CSP,AT,SUB,LIT
  1802.         FDB         $14
  1803.         FDB         QERR
  1804.         FDB         SEMIS
  1805. *
  1806. *=======>> 110 <<   ?LOADING
  1807. *
  1808.         FCB         $88
  1809.         FCC         '?LOADIN'
  1810.         FCB         $C7
  1811.         FDB         QCSP-7
  1812. QLOAD   FDB         DOCOL,BLK,AT,ZEQU,LIT
  1813.         FDB         $16
  1814.         FDB         QERR
  1815.         FDB         SEMIS
  1816. *
  1817. *=======>> 111 <<   COMPILE
  1818. *
  1819.         FCB         $87
  1820.         FCC         'COMPIL'
  1821.         FCB         $C5
  1822.         FDB         QLOAD-11
  1823. COMPIL  FDB         DOCOL,QCOMP,FROMR,TWOP,DUP,TOR,AT,COMMA
  1824.         FDB         SEMIS
  1825. *
  1826. *=======>> 112 <<   [
  1827. *
  1828.         FCB         $C1               ; [ immediate
  1829.         FCB         $DB
  1830.         FDB         COMPIL-10
  1831. LBRAK   FDB         DOCOL,ZERO,STATE,STORE
  1832.         FDB         SEMIS
  1833. *
  1834. *=======>> 113 <<    ]
  1835. *
  1836.         FCB         $81               ; ]
  1837.         FCB         $DD
  1838.         FDB         LBRAK-4
  1839. RBRAK   FDB         DOCOL,LIT
  1840.         FDB         $C0
  1841.         FDB         STATE,STORE
  1842.         FDB         SEMIS
  1843. *
  1844. *=======>> 114 <<   SMUDGE
  1845. *
  1846.         FCB         $86
  1847.         FCC         'SMUDG'
  1848.         FCB         $C5
  1849.         FDB         RBRAK-4
  1850. SMUDGE  FDB         DOCOL,LATEST,LIT
  1851.         FDB         $20
  1852.         FDB         TOGGLE
  1853.         FDB         SEMIS
  1854. *
  1855. *=======>> 115 <<   HEX
  1856. *
  1857.         FCB         $83
  1858.         FCC         'HE'
  1859.         FCB         $D8
  1860.         FDB         SMUDGE-9
  1861. HEX     FDB         DOCOL
  1862.         FDB         LIT
  1863.         FDB         16
  1864.         FDB         BASE,STORE
  1865.         FDB         SEMIS
  1866. *
  1867. *=======>> 116 <<   DECIMAL
  1868. *
  1869.         FCB         $87
  1870.         FCC         'DECIMA'
  1871.         FCB         $CC
  1872.         FDB         HEX-6
  1873. DEC     FDB         DOCOL
  1874.         FDB         LIT
  1875.         FDB         10
  1876.         FDB         BASE,STORE
  1877.         FDB         SEMIS
  1878. *
  1879. *=======>> 117 <<   (;CODE)
  1880. *
  1881.         FCB         $87
  1882.         FCC         '(;CODE'
  1883.         FCB         $A9
  1884.         FDB         DEC-10
  1885. PSCODE  FDB         DOCOL,FROMR,TWOP,LATEST,PFA,CFA,STORE
  1886.         FDB         SEMIS
  1887. *
  1888. *=======>> 118 <<   ;CODE
  1889. *
  1890.         FCB         $C5
  1891.         FCC         ';COD'
  1892.         FCB         $C5
  1893.         FDB         PSCODE-10
  1894. SEMIC   FDB         DOCOL,QCSP,COMPIL,PSCODE,SMUDGE,LBRAK,QSTACK
  1895.         FDB         SEMIS
  1896. *
  1897. *                   note : `QSTACK` will be replaced by `ASSEMBLER` later
  1898. *
  1899. *=======>> 119 <<   <BUILDS
  1900. *
  1901.         FCB         $87
  1902.         FCC         '<BUILD'
  1903.         FCB         $D3
  1904.         FDB         SEMIC-8
  1905. BUILDS  FDB         DOCOL,ZERO,CON
  1906.         FDB         SEMIS
  1907. *
  1908. *=======>> 120 <<   DOES>
  1909. *
  1910.         FCB         $85
  1911.         FCC         'DOES'
  1912.         FCB         $BE
  1913.         FDB         BUILDS-10
  1914. DOES    FDB         DOCOL,FROMR,TWOP,LATEST,PFA,STORE
  1915.         FDB         PSCODE
  1916. *
  1917. DODOES  LDD         IP                ; get instruction pointer
  1918.         LDX         RP                ; get return pointer
  1919.         DEX
  1920.         DEX
  1921.         STX         RP                ; save rp
  1922.         STD         2,X
  1923.         LDX         W                 ;
  1924.         INX
  1925.         INX
  1926.         STX         N
  1927.         LDX         0,X
  1928.         STX         IP                ;
  1929.         CLRA
  1930.         LDAB        #2
  1931.         ADDD        N
  1932.         PSHB
  1933.         PSHA
  1934.         JMP         NEXT2
  1935. *
  1936. *=======>> 121 <<   COUNT
  1937. *
  1938.         FCB         $85
  1939.         FCC         'COUN'
  1940.         FCB         $D4
  1941.         FDB         DOES-8
  1942. COUNT   FDB         DOCOL,DUP,ONEP,SWAP,CAT
  1943.         FDB         SEMIS
  1944. *
  1945. *=======>> 122 <<   TYPE
  1946. *
  1947.         FCB         $84
  1948.         FCC         'TYP'
  1949.         FCB         $C5
  1950.         FDB         COUNT-8
  1951. TYPE    FDB         DOCOL,DDUP,ZBRAN
  1952.         FDB         TYPE3-*
  1953.         FDB         OVER,PLUS,SWAP,XDO1
  1954. TYPE2   FDB         I,CAT,EMIT,XLOOP
  1955.         FDB         TYPE2-*
  1956.         FDB         BRAN
  1957.         FDB         TYPE4-*
  1958. TYPE3   FDB         DROP
  1959. TYPE4   FDB         SEMIS
  1960. *
  1961. *=======>> 123 <<   -TRAILING
  1962. *
  1963.         FCB         $89
  1964.         FCC         '-TRAILIN'
  1965.         FCB         $C7
  1966.         FDB         TYPE-7
  1967. DTRAIL  FDB         DOCOL,DUP,ZERO,XDO1
  1968. DTRAL2  FDB         OVER,OVER,PLUS,ONE,SUB,CAT,BL
  1969.         FDB         SUB,ZBRAN
  1970.         FDB         DTRAL3-*
  1971.         FDB         LEAVE,BRAN
  1972.         FDB         DTRAL4-*
  1973. DTRAL3  FDB         ONE,SUB
  1974. DTRAL4  FDB         XLOOP
  1975.         FDB         DTRAL2-*
  1976.         FDB         SEMIS
  1977. *
  1978. *=======>> 124 <<   (.@@@)
  1979. *
  1980.         FCB         $84
  1981.         FCC         '(."'
  1982.         FCB         $A9
  1983.         FDB         DTRAIL-12
  1984. PDOTQ   FDB         DOCOL,R,TWOP,COUNT,DUP,ONEP
  1985.         FDB         FROMR,PLUS,TOR,TYPE
  1986.         FDB         SEMIS
  1987. *
  1988. *=======>> 125 <<   .@@@
  1989. *
  1990.         FCB         $C2
  1991.         FCC         '.'
  1992.         FCB         $A2
  1993.         FDB         PDOTQ-7
  1994. DOTQ    FDB         DOCOL
  1995.         FDB         LIT
  1996.         FDB         $22
  1997.         FDB         STATE,AT,ZBRAN
  1998.         FDB         DOTQ1-*
  1999.         FDB         COMPIL,PDOTQ,WORD
  2000.         FDB         HERE,CAT,ONEP,ALLOT,BRAN
  2001.         FDB         DOTQ2-*
  2002. DOTQ1   FDB         WORD,HERE,COUNT,TYPE
  2003. DOTQ2   FDB         SEMIS
  2004. *
  2005. *=======>> 126 <<   ?STACK            MACHINE DEPENDENT
  2006. *
  2007.         FCB         $86
  2008.         FCC         '?STAC'
  2009.         FCB         $CB
  2010.         FDB         DOTQ-5
  2011. QSTACK  FDB         DOCOL,LIT
  2012.         FDB         $12
  2013.         FDB         PORIG,AT,TWO,SUB,SPAT,LESS,ONE
  2014.         FDB         QERR
  2015. *
  2016. *                   prints 'empty stack'
  2017. *
  2018. QSTAC2  FDB         SPAT
  2019. *
  2020. *                   here we compare with a value at least 128
  2021. *                   higher than dict. ptr.  (DP)
  2022. *
  2023.         FDB         HERE,LIT
  2024.         FDB         $80
  2025.         FDB         PLUS,LESS,ZBRAN
  2026.         FDB         QSTAC3-*
  2027.         FDB         TWO
  2028.         FDB         QERR
  2029. *
  2030. *                   prints 'full stack'
  2031. *
  2032. QSTAC3  FDB         SEMIS
  2033. *
  2034. *=======>> 128 <<   EXPECT
  2035. *
  2036.         FCB         $86
  2037.         FCC         'EXPEC'
  2038.         FCB         $D4
  2039.         FDB         QSTACK-9
  2040. EXPECT  FDB         DOCOL,OVER,PLUS,OVER,XDO1
  2041. EXPEC2  FDB         KEY,DUP,LIT
  2042.         FDB         $0E
  2043.         FDB         PORIG,AT,EQUAL,ZBRAN
  2044.         FDB         EXPEC3-*
  2045.         FDB         DROP,LIT
  2046.         FDB         8
  2047.         FDB         OVER,I,EQUAL,DUP,FROMR,TWO,SUB,PLUS
  2048.         FDB         TOR,SUB,BRAN
  2049.         FDB         EXPEC6-*
  2050. EXPEC3  FDB         DUP,LIT
  2051.         FDB         $D
  2052.         FDB         EQUAL,ZBRAN
  2053.         FDB         EXPEC4-*
  2054.         FDB         LEAVE,DROP,BL,ZERO,BRAN
  2055.         FDB         EXPEC5-*
  2056. EXPEC4  FDB         DUP
  2057. EXPEC5  FDB         I,CSTORE,ZERO,I,ONEP,STORE
  2058. EXPEC6  FDB         EMIT,XLOOP
  2059.         FDB         EXPEC2-*
  2060.         FDB         DROP
  2061.         FDB         SEMIS
  2062. *
  2063. *=======>> 129 <<   QUERY
  2064. *
  2065.         FCB         $85
  2066.         FCC         'QUER'
  2067.         FCB         $D9
  2068.         FDB         EXPECT-9
  2069. QUERY   FDB         DOCOL
  2070.         FDB         TIB,AT,COLUMS
  2071.         FDB         AT,EXPECT,ZERO,IN,STORE
  2072.         FDB         SEMIS
  2073. *
  2074. *=======>> 130 <<                     ( null - as in 00 hex )
  2075. *
  2076.         FCB         $C1
  2077.         FCB         $80
  2078.         FDB         QUERY-8
  2079. NULL    FDB         DOCOL,BLK,AT,ZBRAN
  2080.         FDB         NULL2-*
  2081.         FDB         ONE,BLK,PSTORE
  2082.         FDB         ZERO,IN,STORE,BLK,AT,BSCR,MOD
  2083.         FDB         ZEQU
  2084. *                   check for end of screen
  2085.         FDB         ZBRAN
  2086.         FDB         NULL1-*
  2087.         FDB         QEXEC,FROMR,DROP
  2088. NULL1   FDB         BRAN
  2089.         FDB         NULL3-*
  2090. NULL2   FDB         FROMR,DROP
  2091. NULL3   FDB         SEMIS
  2092. *
  2093. *=======>> 133 <<   FILL
  2094. *
  2095.         FCB         $84
  2096.         FCC         'FIL'
  2097.         FCB         $CC
  2098.         FDB         NULL-4
  2099. FILL    FDB         DOCOL,SWAP,TOR,OVER,CSTORE,DUP,ONEP
  2100.         FDB         FROMR,ONE,SUB,CMOVE
  2101.         FDB         SEMIS
  2102. *
  2103. *=======>> 134 <<   ERASE
  2104. *
  2105.         FCB         $85
  2106.         FCC         'ERAS'
  2107.         FCB         $C5
  2108.         FDB         FILL-7
  2109. ERASE   FDB         DOCOL,ZERO,FILL
  2110.         FDB         SEMIS
  2111. *
  2112. *=======>> 135 <<   BLANKS
  2113. *
  2114.         FCB         $86
  2115.         FCC         'BLANK'
  2116.         FCB         $D3
  2117.         FDB         ERASE-8
  2118. BLANKS  FDB         DOCOL,BL,FILL
  2119.         FDB         SEMIS
  2120. *
  2121. *=======>> 136 <<   HOLD
  2122. *
  2123.         FCB         $84
  2124.         FCC         'HOL'
  2125.         FCB         $C4
  2126.         FDB         BLANKS-9
  2127. HOLD    FDB         DOCOL,LIT,$FFFF,HLD,PSTORE,HLD,AT,CSTORE
  2128.         FDB         SEMIS
  2129. *
  2130. *=======>> 137 <<   PAD
  2131. *
  2132.         FCB         $83
  2133.         FCC         'PA'
  2134.         FCB         $C4
  2135.         FDB         HOLD-7
  2136. PAD     FDB         DOCOL,HERE,LIT
  2137.         FDB         $44
  2138.         FDB         PLUS
  2139.         FDB         SEMIS
  2140. *
  2141. *=======>> 138 <<   WORD
  2142. *
  2143.         FCB         $84
  2144.         FCC         'WOR'
  2145.         FCB         $C4
  2146.         FDB         PAD-6
  2147. WORD    FDB         DOCOL,BLK,AT,ZBRAN
  2148.         FDB         WORD2-*
  2149.         FDB         BLK,AT,BLOCK,BRAN
  2150.         FDB         WORD3-*
  2151. WORD2   FDB         TIB,AT
  2152. WORD3   FDB         IN,AT,PLUS,SWAP,ENCLOS,HERE,LIT
  2153.         FDB         34
  2154.         FDB         BLANKS,IN,PSTORE,OVER,SUB,TOR,R,HERE
  2155.         FDB         CSTORE,PLUS,HERE,ONEP,FROMR,CMOVE
  2156.         FDB         SEMIS
  2157. *
  2158. *=======>> 139 <<   (NUMBER)
  2159. *
  2160.         FCB         $88
  2161.         FCC         '(NUMBER'
  2162.         FCB         $A9
  2163.         FDB         WORD-7
  2164. PNUMB   FDB         DOCOL
  2165. PNUMB2  FDB         ONEP,DUP,TOR,CAT,BASE,AT,DIGIT,ZBRAN
  2166.         FDB         PNUMB4-*
  2167.         FDB         SWAP,BASE,AT,USTAR,DROP,ROT,BASE
  2168.         FDB         AT,USTAR,DPLUS,DPL,AT,ONEP,ZBRAN
  2169.         FDB         PNUMB3-*
  2170.         FDB         ONE,DPL,PSTORE
  2171. PNUMB3  FDB         FROMR,BRAN
  2172.         FDB         PNUMB2-*
  2173. PNUMB4  FDB         FROMR
  2174.         FDB         SEMIS
  2175. *
  2176. *=======>> 140 <<   NUMBER
  2177. *
  2178.         FCB         $86
  2179.         FCC         'NUMBE'
  2180.         FCB         $D2
  2181.         FDB         PNUMB-11
  2182. NUMB    FDB         DOCOL,ZERO,ZERO,ROT,DUP,ONEP,CAT,LIT
  2183.         FCB         0
  2184.         FCC         '-'
  2185.         FDB         EQUAL,DUP,TOR,PLUS,LIT,$FFFF
  2186. NUMB1   FDB         DPL,STORE,PNUMB,DUP,CAT,BL,SUB
  2187.         FDB         ZBRAN
  2188.         FDB         NUMB2-*
  2189.         FDB         DUP,CAT,LIT
  2190.         FCB         0
  2191.         FCC         '.'
  2192.         FDB         SUB,ZERO,QERR,ZERO,BRAN
  2193.         FDB         NUMB1-*
  2194. NUMB2   FDB         DROP,FROMR,ZBRAN
  2195.         FDB         NUMB3-*
  2196.         FDB         DMINUS
  2197. NUMB3   FDB         SEMIS
  2198. *
  2199. *=======>> 141 <<   -FIND
  2200. *
  2201.         FCB         $85
  2202.         FCC         '-FIN'
  2203.         FCB         $C4
  2204.         FDB         NUMB-9
  2205. DFIND   FDB         DOCOL,BL,WORD,HERE,CONTXT,AT,AT
  2206.         FDB         PFIND,DUP,ZEQU,ZBRAN
  2207.         FDB         DFIND2-*
  2208.         FDB         DROP,HERE,LATEST,PFIND
  2209. DFIND2  FDB         SEMIS
  2210. *
  2211. *=======>> 142 <<   (ABORT)
  2212. *
  2213.         FCB         $87
  2214.         FCC         '(ABORT'
  2215.         FCB         $A9
  2216.         FDB         DFIND-8
  2217. PABORT  FDB         DOCOL,ABORT
  2218.         FDB         SEMIS
  2219. *
  2220. *=======>> 143 <<   ERROR
  2221. *
  2222.         FCB         $85
  2223.         FCC         'ERRO'
  2224.         FCB         $D2
  2225.         FDB         PABORT-10
  2226. ERROR   FDB         DOCOL,WARN,AT,ZLESS
  2227.         FDB         ZBRAN
  2228. *
  2229. *                   WARNING is -1 to abort, 0 to print error number
  2230. *                   and 1 to print error message from disc
  2231. *
  2232.         FDB         ERROR2-*
  2233.         FDB         PABORT
  2234. ERROR2  FDB         HERE,COUNT,TYPE,PDOTQ
  2235.         FCB         4
  2236.         FCC         '  ? '
  2237.         FDB         MESS,SPSTOR,IN,AT,BLK,AT,QUIT
  2238.         FDB         SEMIS
  2239. *
  2240. *=======>> 144 <<   ID.
  2241. *
  2242.         FCB         $83
  2243.         FCC         'ID'
  2244.         FCB         $AE
  2245.         FDB         ERROR-8
  2246. IDDOT   FDB         DOCOL,PAD,LIT
  2247.         FDB         32
  2248.         FDB         LIT
  2249.         FDB         $5F               ; ( underline )
  2250.         FDB         FILL,DUP,PFA,LFA,OVER,SUB,PAD
  2251.         FDB         SWAP,CMOVE,PAD,COUNT,LIT
  2252.         FDB         31
  2253.         FDB         AND,TYPE,SPACE
  2254.         FDB         SEMIS
  2255. *
  2256. *=======>> 145 <<   CREATE
  2257. *
  2258.         FCB         $86
  2259.         FCC         'CREAT'
  2260.         FCB         $C5
  2261.         FDB         IDDOT-6
  2262. CREATE  FDB         DOCOL,DFIND,ZBRAN
  2263.         FDB         CREAT2-*
  2264.         FDB         DROP,CR,PDOTQ
  2265.         FCB         8
  2266.         FCC         ' redef: '
  2267.         FDB         NFA,IDDOT,LIT
  2268.         FDB         4
  2269.         FDB         MESS,SPACE
  2270. CREAT2  FDB         HERE,DUP,CAT,WIDTH,AT,MIN
  2271.         FDB         ONEP,ALLOT,DUP,LIT
  2272.         FDB         $A0
  2273.         FDB         TOGGLE,HERE,ONE,SUB,LIT
  2274.         FDB         $80
  2275.         FDB         TOGGLE,LATEST,COMMA,CURENT,AT,STORE
  2276.         FDB         HERE,TWOP,COMMA
  2277.         FDB         SEMIS
  2278. *
  2279. *=======>> 146 <<   [COMPILE]
  2280. *
  2281.         FCB         $C9               ; immediate
  2282.         FCC         '[COMPILE'
  2283.         FCB         $DD
  2284.         FDB         CREATE-9
  2285. BCOMP   FDB         DOCOL,DFIND,ZEQU,ZERO,QERR,DROP,CFA,COMMA
  2286.         FDB         SEMIS
  2287. *
  2288. *=======>> 147 <<   LITERAL
  2289. *
  2290.         FCB         $C7               ; immediate
  2291.         FCC         'LITERA'
  2292.         FCB         $CC
  2293.         FDB         BCOMP-12
  2294. LITER   FDB         DOCOL,STATE,AT,ZBRAN
  2295.         FDB         LITER2-*
  2296.         FDB         COMPIL,LIT,COMMA
  2297. LITER2  FDB         SEMIS
  2298.  
  2299. *
  2300. *=======>> 148 <<   DLITERAL
  2301. *
  2302.         FCB         $C8               ; immediate
  2303.         FCC         'DLITERA'
  2304.         FCB         $CC
  2305.         FDB         LITER-10
  2306. DLITER  FDB         DOCOL,STATE,AT,ZBRAN
  2307.         FDB         DLITE2-*
  2308.         FDB         SWAP,LITER,LITER
  2309. DLITE2  FDB         SEMIS
  2310. *
  2311. *=======>> 149 <<   INTERPRET
  2312. *
  2313.         FCB         $89
  2314.         FCC         'INTERPRE'
  2315.         FCB         $D4
  2316.         FDB         DLITER-11
  2317. INTERP  FDB         DOCOL
  2318.  
  2319. INTER2  FDB         DFIND,ZBRAN
  2320.         FDB         INTER5-*
  2321.         FDB         STATE,AT,LESS
  2322.         FDB         ZBRAN
  2323.  
  2324.         FDB         INTER3-*
  2325.         FDB         CFA,COMMA,BRAN
  2326.         FDB         INTER4-*
  2327.  
  2328. INTER3  FDB         CFA,EXEC
  2329. INTER4  FDB         BRAN
  2330.         FDB         INTER7-*
  2331.  
  2332. INTER5  FDB         HERE,NUMB,DPL,AT,ONEP,ZBRAN
  2333.         FDB         INTER6-*
  2334.         FDB         DLITER,BRAN
  2335.         FDB         INTER7-*
  2336. INTER6  FDB         DROP,LITER
  2337.  
  2338. INTER7  FDB         QSTACK,BRAN
  2339.         FDB         INTER2-*          ; branch always
  2340. *
  2341. *=======>> 150 <<   IMMEDIATE
  2342. *
  2343.         FCB         $89
  2344.         FCC         'IMMEDIAT'
  2345.         FCB         $C5
  2346.         FDB         INTERP-12
  2347. IMMED   FDB         DOCOL,LATEST,LIT
  2348.         FDB         $40
  2349.         FDB         TOGGLE
  2350.         FDB         SEMIS
  2351. *
  2352. *=======>> 151 <<   VOCABULARY
  2353. *
  2354.         FCB         $8A
  2355.         FCC         'VOCABULAR'
  2356.         FCB         $D9
  2357.         FDB         IMMED-12
  2358. VOCAB   FDB         DOCOL,BUILDS,LIT,$81A0,COMMA,CURENT,AT,CFA
  2359.         FDB         COMMA,HERE,VOCLIN,AT,COMMA,VOCLIN,STORE,DOES
  2360. DOVOC   FDB         TWOP,CONTXT,STORE
  2361.         FDB         SEMIS
  2362. *
  2363. *=======>> 153 <<   DEFINITIONS
  2364. *
  2365.         FCB         $8B
  2366.         FCC         'DEFINITION'
  2367.         FCB         $D3
  2368.         FDB         VOCAB-13
  2369. DEFIN   FDB         DOCOL,CONTXT,AT,CURENT,STORE
  2370.         FDB         SEMIS
  2371. *
  2372. *=======>> 154 <<   (
  2373. *
  2374.         FCB         $C1               ; immediate (
  2375.         FCB         $A8
  2376.         FDB         DEFIN-14
  2377. PAREN   FDB         DOCOL,LIT
  2378.         FCB         0
  2379.         FCC         ')'
  2380.         FDB         WORD
  2381.         FDB         SEMIS
  2382. *
  2383. *=======>> 155 <<   QUIT
  2384. *
  2385.         FCB         $84
  2386.         FCC         'QUI'
  2387.         FCB         $D4
  2388.         FDB         PAREN-4
  2389. QUIT    FDB         DOCOL
  2390.         FDB         ZERO,BLK,STORE,LBRAK
  2391. *
  2392. *                   Here is the outer interpreter
  2393. *                   which gets a line of input, does it, prints " OK"
  2394. *                   then repeats :
  2395. *
  2396. QUIT2   FDB         RPSTOR,CR,QUERY,INTERP,STATE,AT,ZEQU
  2397.         FDB         ZBRAN
  2398.         FDB         QUIT3-*
  2399.         FDB         PDOTQ
  2400.         FCB         3
  2401.         FCC         ' OK'
  2402. QUIT3   FDB         BRAN
  2403.         FDB         QUIT2-*           ; branch always
  2404. *
  2405. *=======>> 156 <<   ABORT
  2406. *
  2407.         FCB         $85
  2408.         FCC         'ABOR'
  2409.         FCB         $D4
  2410.         FDB         QUIT-7
  2411. ABORT   FDB         DOCOL,SPSTOR,DEC,QSTACK,CR,MTBUF
  2412.         FDB         RESTR
  2413.         FDB         FIRST,DUP,USE,STORE,PREV,STORE   ; added 2/7/90
  2414.         FDB         PDOTQ
  2415.         FCB         15
  2416.         FCC         ' HCforth  v2.0 '
  2417.         FDB         FORTH,DEFIN,CR
  2418.         FDB         QUIT              ; branch always
  2419. *
  2420. *=======>> 157 <<   COLD
  2421. *
  2422. *                   bootstrap code - move rom contents to ram
  2423. *
  2424.         FCB         $84
  2425.         FCC         'COL'
  2426.         FCB         $C4
  2427.         FDB         ABORT-8
  2428. COLD    FDB         *+2
  2429. CENT    LDS         #REND-1           ; top of destination
  2430.         LDX         #ERAM             ; top of stuff to move
  2431. COLD2   DEX
  2432.         LDAA        0,X
  2433.         PSHA                          ; move TASK and FORTH to ram
  2434.         CPX         #RAM
  2435.         BNE         COLD2
  2436. *
  2437.         LDS         #XFENCE-1         ; put stack at a safe place for now
  2438.         LDX         COLINT
  2439.         STX         XCOLUM            ; columns
  2440.         LDX         DELINT
  2441.         STX         XDELAY            ; delay
  2442.         LDX         VOCINT
  2443.         STX         XVOCL             ; vocabulary link
  2444.         LDX         DPINIT
  2445.         STX         XDP               ; dictionary pointer
  2446.         LDX         FENCIN
  2447.         STX         XFENCE            ; fence
  2448. *
  2449. WENT    LDS         #XFENCE-1         ; top of destination
  2450.         LDX         #FENCIN           ; top of stuff to move
  2451. WARM2   DEX
  2452.         LDAA        0,X               ; get byte
  2453.         PSHA                          ; save byte
  2454.         CPX         #SINIT            ; done ?
  2455.         BNE         WARM2             ; no
  2456. *
  2457.         LDS         SINIT             ; load stack pointer
  2458.         LDX         UPINIT            ;
  2459.         STX         UP                ; init user ram pointer
  2460.  
  2461.         LDX         #ABORT            ; get cfa of abort
  2462.  
  2463.         STX         IP                ; and save as first instruction
  2464. *
  2465. *                   start the virtual machine running
  2466. *
  2467.         JMP         RPSTOR+2          ;
  2468. *
  2469. *                   here is the stuff that gets copied to ram
  2470. *
  2471. RAM     FDB         RAMTOP,RAMTOP,0,0
  2472. *
  2473. *=======>> 152 <<
  2474. *
  2475.         FCB         $C5               ; immediate
  2476.         FCC         'FORT'
  2477.         FCB         $C8
  2478.         FDB         NOOP-7
  2479. RFORTH  FDB         DODOES,DOVOC,$81A0,TASK-7
  2480.         FDB         0
  2481.         FCC         '(C) Forth Interest Group,  1979'
  2482. *
  2483.         FCB         $84
  2484.         FCC         'TAS'
  2485.         FCB         $CB
  2486.         FDB         FORTH-8
  2487. RTASK   FDB         DOCOL,SEMIS
  2488. ERAM    EQU         *
  2489. *
  2490. *=======>> 158 <<   S->D
  2491. *
  2492.         FCB         $84               ; sign extend word to double
  2493.         FCC         'S->'
  2494.         FCB         $C4
  2495.         FDB         COLD-7
  2496. STOD    FDB         DOCOL,DUP,ZLESS,MINUS
  2497.         FDB         SEMIS
  2498. *
  2499. *=======>> 159 <<   *
  2500. *
  2501.         FCB         $81               ; multiply two words
  2502.         FCB         $AA
  2503.         FDB         STOD-7
  2504. STAR    FDB         *+2
  2505.  
  2506.         LDAA        #16               ; bits/word counter
  2507.         PSHA
  2508.  
  2509.         CLRA
  2510.         CLRB
  2511.         TSX
  2512. STAR2   ROR         3,X               ; shift multiplier
  2513.         ROR         4,X
  2514.         DEC         0,X               ; done ?
  2515.         BMI         STAR4            ; yes
  2516.  
  2517.         BCC         STAR3
  2518.         ADDD        1,X
  2519. STAR3   RORA
  2520.         RORB                          ; shift result
  2521.         BRA         STAR2
  2522.  
  2523. STAR4   INS                           ; dump counter
  2524.  
  2525.         INS
  2526.         INS
  2527.         JMP         NEXT              ;
  2528. *
  2529. *=======>> 160 <<   /MOD
  2530. *
  2531.         FCB         $84
  2532.         FCC         '/MO'
  2533.         FCB         $C4
  2534.         FDB         STAR-4
  2535. SLMOD   FDB         DOCOL,TOR,STOD,FROMR,USLASH
  2536.         FDB         SEMIS
  2537. *
  2538. *=======>> 161 <<   /
  2539. *
  2540.         FCB         $81               ; /
  2541.         FCB         $AF
  2542.         FDB         SLMOD-7
  2543. SLASH   FDB         DOCOL,SLMOD,SWAP,DROP
  2544.         FDB         SEMIS
  2545. *
  2546. *=======>> 162 <<   MOD
  2547. *
  2548.         FCB         $83
  2549.         FCC         'MO'
  2550.         FCB         $C4
  2551.         FDB         SLASH-4
  2552. MOD     FDB         DOCOL,SLMOD,DROP
  2553.         FDB         SEMIS
  2554. *
  2555. *=======>> 163 <<   */MOD
  2556. *
  2557.         FCB         $85
  2558.         FCC         '*/MO'
  2559.         FCB         $C4
  2560.         FDB         MOD-6
  2561. SSMOD   FDB         DOCOL,TOR,USTAR,FROMR,USLASH
  2562.         FDB         SEMIS
  2563. *
  2564. *=======>> 164 <<   */
  2565. *
  2566.         FCB         $82
  2567.         FCC         '*'
  2568.         FCB         $AF
  2569.         FDB         SSMOD-8
  2570. SSLASH  FDB         DOCOL,SSMOD,SWAP,DROP
  2571.         FDB         SEMIS
  2572. *
  2573. *=======>> 165 <<   M/MOD
  2574. *
  2575.         FCB         $85
  2576.         FCC         'M/MO'
  2577.         FCB         $C4
  2578.         FDB         SSLASH-5
  2579. MSMOD   FDB         DOCOL,TOR,ZERO,R,USLASH
  2580.         FDB         FROMR,SWAP,TOR,USLASH,FROMR
  2581.         FDB         SEMIS
  2582. *
  2583. *=======>> 166 <<   ABS
  2584. *
  2585.         FCB         $83
  2586.         FCC         'AB'
  2587.         FCB         $D3
  2588.         FDB         MSMOD-8
  2589. ABS     FDB         DOCOL,DUP,ZLESS,ZBRAN
  2590.         FDB         ABS2-*
  2591.         FDB         MINUS
  2592. ABS2    FDB         SEMIS
  2593. *
  2594. *=======>> 167 <<   DABS
  2595. *
  2596.         FCB         $84
  2597.         FCC         'DAB'
  2598.         FCB         $D3
  2599.         FDB         ABS-6
  2600. DABS    FDB         DOCOL,DUP,ZLESS,ZBRAN
  2601.         FDB         DABS2-*
  2602.         FDB         DMINUS
  2603. DABS2   FDB         SEMIS
  2604. *
  2605. *                   disc primitives
  2606. *
  2607. *=======>> 168 <<   USE
  2608. *
  2609.         FCB         $83
  2610.         FCC         'US'
  2611.         FCB         $C5
  2612.         FDB         DABS-7
  2613. USE     FDB         DOCON
  2614.         FDB         XUSE
  2615. *
  2616. *=======>> 169 <<   PREV
  2617. *
  2618.         FCB         $84
  2619.         FCC         'PRE'
  2620.         FCB         $D6
  2621.         FDB         USE-6
  2622. PREV    FDB         DOCON
  2623.         FDB         XPREV
  2624. *
  2625. *=======>> 170 <<   +BUF
  2626. *
  2627.         FCB         $84
  2628.         FCC         '+BU'
  2629.         FCB         $C6
  2630.         FDB         PREV-7
  2631. PBUF    FDB         DOCOL,LIT
  2632.         FDB         260                 ; 
  2633.         FDB         PLUS,DUP,LIMIT
  2634.         FDB         EQUAL,ZBRAN
  2635.         FDB         PBUF2-*
  2636.         FDB         DROP,FIRST
  2637. PBUF2   FDB         DUP,PREV,AT,SUB
  2638.         FDB         SEMIS
  2639. *
  2640. *=======>> 171 <<   UPDATE
  2641. *
  2642.         FCB         $86
  2643.         FCC         'UPDAT'
  2644.         FCB         $C5
  2645.         FDB         PBUF-7
  2646. UPDATE  FDB         DOCOL,PREV,AT,AT,LIT,$8000,OR,PREV,AT,STORE
  2647.         FDB         SEMIS
  2648. *
  2649. *=======>> 172 <<   EMPTY-BUFFERS
  2650. *
  2651.         FCB         $8D
  2652.         FCC         'EMPTY-BUFFER'
  2653.         FCB         $D3
  2654.         FDB         UPDATE-9
  2655. MTBUF   FDB         DOCOL,FIRST,LIMIT,OVER,SUB,ERASE
  2656.         FDB         SEMIS
  2657. *
  2658. *=======>> 175 <<   BUFFER
  2659. *
  2660.         FCB         $86
  2661.         FCC         'BUFFE'
  2662.         FCB         $D2
  2663.         FDB         MTBUF-16
  2664. BUFFER  FDB         DOCOL,USE,AT,DUP,TOR
  2665. BUFFR2  FDB         PBUF,ZBRAN
  2666.         FDB         BUFFR2-*
  2667.         FDB         USE,STORE,R,AT,ZLESS
  2668.         FDB         ZBRAN
  2669.         FDB         BUFFR3-*
  2670.         FDB         R,TWOP,R,AT,LIT,$7FFF,AND,ZERO,RW
  2671. BUFFR3  FDB         R,STORE,R,PREV,STORE,FROMR,TWOP
  2672.         FDB         SEMIS
  2673. *
  2674. *=======>> 176 <<   BLOCK
  2675. *
  2676.         FCB         $85
  2677.         FCC         'BLOC'
  2678.         FCB         $CB
  2679.         FDB         BUFFER-9
  2680. BLOCK   FDB         DOCOL,OFSET,AT,PLUS,TOR
  2681.         FDB         PREV,AT,DUP,AT,R,SUB,DUP,PLUS,ZBRAN
  2682.         FDB         BLOCK5-*
  2683. BLOCK3  FDB         PBUF,ZEQU,ZBRAN
  2684.         FDB         BLOCK4-*
  2685.         FDB         DROP,R,BUFFER,DUP,R,ONE,RW,TWO,SUB
  2686. BLOCK4  FDB         DUP,AT,R,SUB,DUP,PLUS,ZEQU,ZBRAN
  2687.         FDB         BLOCK3-*
  2688.         FDB         DUP,PREV,STORE
  2689. BLOCK5  FDB         FROMR,DROP,TWOP
  2690.         FDB         SEMIS
  2691. *
  2692. *=======>> 177 <<   (LINE)
  2693. *
  2694.         FCB         $86
  2695.         FCC         '(LINE'
  2696.         FCB         $A9
  2697.         FDB         BLOCK-8
  2698. PLINE   FDB         DOCOL,TOR,LIT
  2699.         FDB         $40
  2700.         FDB         BBUF,SSMOD,FROMR,BSCR,STAR,PLUS,BLOCK,PLUS,LIT
  2701.         FDB         $40
  2702.         FDB         SEMIS
  2703. *
  2704. *=======>> 178 <<   .LINE
  2705. *
  2706.         FCB         $85
  2707.         FCC         '.LIN'
  2708.         FCB         $C5
  2709.         FDB         PLINE-9
  2710. DLINE   FDB         DOCOL,PLINE,DTRAIL,TYPE
  2711.         FDB         SEMIS
  2712. *
  2713. *=======>> 179 <<   MESSAGE
  2714. *
  2715.         FCB         $87
  2716.         FCC         'MESSAG'
  2717.         FCB         $C5
  2718.         FDB         DLINE-8
  2719. MESS    FDB         DOCOL,WARN,AT,ZBRAN
  2720.         FDB         MESS3-*
  2721.         FDB         DDUP,ZBRAN
  2722.         FDB         MESS3-*
  2723.         FDB         LIT,4
  2724.         FDB         OFSET,AT,BSCR,SLASH,SUB,DLINE,BRAN
  2725.         FDB         MESS4-*
  2726.  
  2727. MESS3   FDB         PDOTQ               ; print message
  2728.         FCB         6
  2729.         FCC         'err # '            ; error number
  2730.         FDB         DOT                 ; print top of stack
  2731. MESS4   FDB         SEMIS
  2732. *
  2733. *=======>> 180 <<   LOAD              ; input scr #
  2734. *
  2735.         FCB         $84
  2736.         FCC         'LOA'
  2737.         FCB         $C4
  2738.         FDB         MESS-10
  2739. LOAD    FDB         DOCOL,BLK,AT,TOR,IN,AT,TOR,ZERO,IN,STORE
  2740.         FDB         BSCR,STAR,BLK,STORE
  2741.         FDB         INTERP,FROMR,IN,STORE,FROMR,BLK,STORE
  2742.         FDB         SEMIS
  2743. *
  2744. *=======>> 181 <<   -->
  2745. *
  2746.         FCB         $C3
  2747.         FCC         '--'
  2748.         FCB         $BE
  2749.         FDB         LOAD-7
  2750. ARROW   FDB         DOCOL,QLOAD,ZERO,IN,STORE,BSCR
  2751.         FDB         BLK,AT,OVER,MOD,SUB,BLK,PSTORE
  2752.         FDB         SEMIS
  2753. *
  2754. *                   
  2755. *
  2756. *=======>> 182 <<   code for EMIT
  2757. *
  2758. *
  2759. *=======>> 183 <<   code for key
  2760. *
  2761. *
  2762. *=======>> 184 <<   code for ?TERMINAL
  2763. *
  2764. *
  2765. *=======>> 185 <<   code for CR
  2766. *
  2767. *
  2768. *=======>> 189 <<   BLOCK-WRITE       ; write block to disk
  2769. *
  2770.         FCB         $8B
  2771.         FCC         'BLOCK-WRIT'
  2772.         FCB         $C5
  2773.         FDB         ARROW-6
  2774. BWRITE  FDB         *+2
  2775. *
  2776. *
  2777. *
  2778.         JMP         NEXT
  2779. *
  2780. *=======>> 190 <<   BLOCK-READ        ; read block from disk
  2781. *
  2782.         FCB         $8A
  2783.         FCC         'BLOCK-REA'
  2784.         FCB         $C4
  2785.         FDB         BWRITE-14
  2786. BREAD   FDB         *+2
  2787. *
  2788. *
  2789. *
  2790.         JMP         NEXT
  2791. *
  2792. *=======>> 191 <<   R/W
  2793. *
  2794.         FCB         $83
  2795.         FCC         'R/'
  2796.         FCB         $D7
  2797.         FDB         BREAD-13
  2798. RW      FDB         DOCOL
  2799.         FDB         ZBRAN               ; branch if zero
  2800.         FDB         RW3-*
  2801.    
  2802.         FDB         BREAD               ; read
  2803.         FDB         BRAN
  2804.         FDB         RW4-*
  2805.  
  2806. RW3     FDB         BWRITE              ; write
  2807.  
  2808. RW4     FDB         SEMIS
  2809. *
  2810. *=======>> 192 <<   @@                 ( an apostrophe )
  2811. *
  2812.         FCB         $C1
  2813.         FCB         $A7
  2814.         FDB         RW-6
  2815. TICK    FDB         DOCOL,DFIND,ZEQU,ZERO,QERR,DROP,LITER
  2816.         FDB         SEMIS
  2817. *
  2818. *=======>> 193 <<   FORGET
  2819. *
  2820.         FCB         $86
  2821.         FCC         'FORGE'
  2822.         FCB         $D4
  2823.         FDB         TICK-4
  2824. *
  2825. *                   
  2826. *
  2827. FORGET  FDB         DOCOL,CURENT,AT,CONTXT,AT,SUB,LIT
  2828.         FDB         $18
  2829.         FDB         QERR,TICK,DUP,FENCE,AT,LESS,LIT
  2830.         FDB         $15
  2831.         FDB         QERR,DUP,NFA,DP,STORE,LFA,AT,CONTXT,AT,STORE
  2832.         FDB         SEMIS
  2833. *
  2834. *=======>> 194 <<   BACK
  2835. *
  2836.         FCB         $84
  2837.         FCC         'BAC'
  2838.         FCB         $CB
  2839.         FDB         FORGET-9
  2840. BACK    FDB         DOCOL,HERE,SUB,COMMA
  2841.         FDB         SEMIS
  2842. *
  2843. *=======>> 195 <<   BEGIN
  2844. *
  2845.         FCB         $C5
  2846.         FCC         'BEGI'
  2847.         FCB         $CE
  2848.         FDB         BACK-7
  2849. BEGIN   FDB         DOCOL,QCOMP,HERE,ONE
  2850.         FDB         SEMIS
  2851. *
  2852. *=======>> 196 <<   ENDIF
  2853. *
  2854.         FCB         $C5
  2855.         FCC         'ENDI'
  2856.         FCB         $C6
  2857.         FDB         BEGIN-8
  2858. ENDIF   FDB         DOCOL,QCOMP,TWO,QPAIRS,HERE
  2859.         FDB         OVER,SUB,SWAP,STORE
  2860.         FDB         SEMIS
  2861. *
  2862. *=======>> 197 <<   THEN
  2863. *
  2864.         FCB         $C4
  2865.         FCC         'THE'
  2866.         FCB         $CE
  2867.         FDB         ENDIF-8
  2868. THEN    FDB         DOCOL,ENDIF
  2869.         FDB         SEMIS
  2870. *
  2871. *=======>> 198 <<   DO
  2872. *
  2873.         FCB         $C2
  2874.         FCC         'D'
  2875.         FCB         $CF
  2876.         FDB         THEN-7
  2877. DO      FDB         DOCOL,COMPIL,XDO1,HERE,THREE
  2878.         FDB         SEMIS
  2879. *
  2880. *=======>> 199 <<   LOOP
  2881. *
  2882.         FCB         $C4
  2883.         FCC         'LOO'
  2884.         FCB         $D0
  2885.         FDB         DO-5
  2886. LOOP    FDB         DOCOL,THREE,QPAIRS,COMPIL,XLOOP,BACK
  2887.         FDB         SEMIS
  2888. *
  2889. *=======>> 200 <<   +LOOP
  2890. *
  2891.         FCB         $C5
  2892.         FCC         '+LOO'
  2893.         FCB         $D0
  2894.         FDB         LOOP-7
  2895. PLOOP   FDB         DOCOL,THREE,QPAIRS,COMPIL,XPLOOP,BACK
  2896.         FDB         SEMIS
  2897. *
  2898. *=======>> 201 <<   UNTIL
  2899. *
  2900.         FCB         $C5
  2901.         FCC         'UNTI'             ; ( same as end )
  2902.         FCB         $CC
  2903.         FDB         PLOOP-8
  2904. UNTIL   FDB         DOCOL,ONE,QPAIRS,COMPIL,ZBRAN,BACK
  2905.         FDB         SEMIS
  2906. *
  2907. *=======>> 202 <<   END
  2908. *
  2909.         FCB         $C3
  2910.         FCC         'EN'
  2911.         FCB         $C4
  2912.         FDB         UNTIL-8
  2913. END     FDB         DOCOL,UNTIL
  2914.         FDB         SEMIS
  2915. *
  2916. *=======>> 203 <<   AGAIN
  2917. *
  2918.         FCB         $C5
  2919.         FCC         'AGAI'
  2920.         FCB         $CE
  2921.         FDB         END-6
  2922. AGAIN   FDB         DOCOL,ONE,QPAIRS,COMPIL,BRAN,BACK
  2923.         FDB         SEMIS
  2924. *
  2925. *=======>> 204 <<   REPEAT
  2926. *
  2927.         FCB         $C6
  2928.         FCC         'REPEA'
  2929.         FCB         $D4
  2930.         FDB         AGAIN-8
  2931. REPEAT  FDB         DOCOL,TOR,TOR,AGAIN,FROMR,FROMR
  2932.         FDB         TWO,SUB,ENDIF
  2933.         FDB         SEMIS
  2934. *
  2935. *=======>> 205 <<   IF
  2936. *
  2937.         FCB         $C2
  2938.         FCC         'I'
  2939.         FCB         $C6
  2940.         FDB         REPEAT-9
  2941. IF      FDB         DOCOL,COMPIL,ZBRAN,HERE,ZERO,COMMA,TWO
  2942.         FDB         SEMIS
  2943. *
  2944. *=======>> 206 <<   ELSE
  2945. *
  2946.         FCB         $C4
  2947.         FCC         'ELS'
  2948.         FCB         $C5
  2949.         FDB         IF-5
  2950. ELSE    FDB         DOCOL,TWO,QPAIRS,COMPIL,BRAN,HERE
  2951.         FDB         ZERO,COMMA,SWAP,TWO,ENDIF,TWO
  2952.         FDB         SEMIS
  2953. *
  2954. *=======>> 207 <<   WHILE
  2955. *
  2956.         FCB         $C5
  2957.         FCC         'WHIL'
  2958.         FCB         $C5
  2959.         FDB         ELSE-7
  2960. WHILE   FDB         DOCOL,IF,TWOP
  2961.         FDB         SEMIS
  2962. *
  2963. *=======>> 208 <<   SPACES
  2964. *
  2965.         FCB         $86
  2966.         FCC         'SPACE'
  2967.         FCB         $D3
  2968.         FDB         WHILE-8
  2969. SPACES  FDB         DOCOL,ZERO,MAX,DDUP,ZBRAN
  2970.         FDB         SPACE3-*
  2971.         FDB         ZERO,XDO1
  2972. SPACE2  FDB         SPACE,XLOOP
  2973.         FDB         SPACE2-*
  2974. SPACE3  FDB         SEMIS
  2975. *
  2976. *=======>> 209 <<   <#
  2977. *
  2978.         FCB         $82
  2979.         FCC         '<'
  2980.         FCB         $A3
  2981.         FDB         SPACES-9
  2982. BDIGS   FDB         DOCOL,PAD,HLD,STORE
  2983.         FDB         SEMIS
  2984. *
  2985. *=======>> 210 <<   #>
  2986. *
  2987.         FCB         $82
  2988.         FCC         '#'
  2989.         FCB         $BE
  2990.         FDB         BDIGS-5
  2991. EDIGS   FDB         DOCOL,DROP,DROP,HLD,AT,PAD,OVER,SUB
  2992.         FDB         SEMIS
  2993. *
  2994. *=======>> 211 <<   SIGN
  2995. *
  2996.         FCB         $84
  2997.         FCC         'SIG'
  2998.         FCB         $CE
  2999.         FDB         EDIGS-5
  3000. SIGN    FDB         DOCOL,ROT,ZLESS,ZBRAN
  3001.         FDB         SIGN2-*
  3002.         FDB         LIT
  3003.         FCB         0
  3004.         FCC         '-'
  3005.         FDB         HOLD
  3006. SIGN2   FDB         SEMIS
  3007. *
  3008. *=======>> 212 <<   #             ( octothorpe )
  3009. *
  3010.         FCB         $81
  3011.         FCB         $A3
  3012.         FDB         SIGN-7
  3013. DIG     FDB         DOCOL,BASE,AT,MSMOD,ROT,LIT
  3014.         FDB         9
  3015.         FDB         OVER,LESS,ZBRAN
  3016.         FDB         DIG2-*
  3017.         FDB         LIT
  3018.         FDB         7
  3019.         FDB         PLUS
  3020. DIG2    FDB         LIT
  3021.         FCB         0
  3022.         FCC         '0'               ; ascii zero
  3023.         FDB         PLUS,HOLD
  3024.         FDB         SEMIS
  3025. *
  3026. *=======>> 213 <<   #S
  3027. *
  3028.         FCB         $82
  3029.         FCC         '#'
  3030.         FCB         $D3
  3031.         FDB         DIG-4
  3032. DIGS    FDB         DOCOL
  3033. DIGS2   FDB         DIG,OVER,OVER,OR,ZEQU,ZBRAN
  3034.         FDB         DIGS2-*
  3035.         FDB         SEMIS
  3036. *
  3037. *=======>> 214 <<   .R
  3038. *
  3039.         FCB         $82
  3040.         FCC         '.'
  3041.         FCB         $D2
  3042.         FDB         DIGS-5
  3043. DOTR    FDB         DOCOL,TOR,STOD,FROMR,DDOTR
  3044.         FDB         SEMIS
  3045. *
  3046. *=======>> 215 <<   D.R
  3047. *
  3048.         FCB         $83
  3049.         FCC         'D.'
  3050.         FCB         $D2
  3051.         FDB         DOTR-5
  3052. DDOTR   FDB         DOCOL,TOR,SWAP,OVER,DABS,BDIGS,DIGS,SIGN
  3053.         FDB         EDIGS,FROMR,OVER,SUB,SPACES,TYPE
  3054.         FDB         SEMIS
  3055. *
  3056. *=======>> 216 <<   D.
  3057. *
  3058.         FCB         $82
  3059.         FCC         'D'
  3060.         FCB         $AE
  3061.         FDB         DDOTR-6
  3062. DDOT    FDB         DOCOL,ZERO,DDOTR,SPACE
  3063.         FDB         SEMIS
  3064. *
  3065. *=======>> 217 <<   .             ( period )
  3066. *
  3067.         FCB         $81
  3068.         FCB         $AE
  3069.         FDB         DDOT-5
  3070. DOT     FDB         DOCOL,STOD,DDOT
  3071.         FDB         SEMIS
  3072. *
  3073. *=======>> 218 <<   ?             ( question mark )
  3074. *
  3075.         FCB         $81
  3076.         FCB         $BF
  3077.         FDB         DOT-4
  3078. QUEST   FDB         DOCOL,AT,DOT
  3079.         FDB         SEMIS
  3080. *
  3081. *=======>> 219 <<   LIST
  3082. *
  3083.         FCB         $84
  3084.         FCC         'LIS'
  3085.         FCB         $D4
  3086.         FDB         QUEST-4
  3087. LIST    FDB         DOCOL,DEC,CR,DUP,SCR,STORE,PDOTQ
  3088.         FCB         6
  3089.         FCC         'SCR # '
  3090.         FDB         DOT,LIT
  3091.         FDB         $10
  3092.         FDB         ZERO,XDO1
  3093. LIST2   FDB         CR,I,THREE
  3094.         FDB         DOTR,SPACE,I,SCR,AT,DLINE,XLOOP
  3095.         FDB         LIST2-*
  3096.         FDB         CR
  3097.         FDB         SEMIS
  3098. *
  3099. *=======>> 220 <<   INDEX
  3100. *
  3101.         FCB         $85
  3102.         FCC         'INDE'
  3103.         FCB         $D8
  3104.         FDB         LIST-7
  3105. INDEX   FDB         DOCOL,CR,ONEP,SWAP,XDO1
  3106. INDEX2  FDB         CR,I,THREE
  3107.         FDB         DOTR,SPACE,ZERO,I,DLINE
  3108.         FDB         QTERM,ZBRAN
  3109.         FDB         INDEX3-*
  3110.         FDB         LEAVE
  3111. INDEX3  FDB         XLOOP
  3112.         FDB         INDEX2-*
  3113.         FDB         CR
  3114.         FDB         SEMIS
  3115. *
  3116. *=======>> 221 <<   TRIAD
  3117. *
  3118.         FCB         $85
  3119.         FCC         'TRIA'
  3120.         FCB         $C4
  3121.         FDB         INDEX-8
  3122. TRIAD   FDB         DOCOL,THREE,SLASH,THREE,STAR
  3123.         FDB         THREE,OVER,PLUS,SWAP,XDO1
  3124. TRIAD2  FDB         CR,I
  3125.         FDB         LIST,QTERM,ZBRAN
  3126.         FDB         TRIAD3-*
  3127.         FDB         LEAVE
  3128. TRIAD3  FDB         XLOOP
  3129.         FDB         TRIAD2-*
  3130.         FDB         CR,LIT
  3131.         FDB         $0F
  3132.         FDB         MESS,CR
  3133.         FDB         SEMIS
  3134. *
  3135. *=======>> 222 <<   VLIST
  3136. *
  3137.         FCB         $85
  3138.         FCC         'VLIS'
  3139.         FCB         $D4
  3140.         FDB         TRIAD-8
  3141. VLIST   FDB         DOCOL,LIT
  3142.         FDB         $80
  3143.         FDB         OUT,STORE,CONTXT,AT,AT
  3144. VLIST1  FDB         OUT,AT,COLUMS,AT,LIT
  3145.         FDB         32
  3146.         FDB         SUB,GREAT,ZBRAN
  3147.         FDB         VLIST2-*
  3148.         FDB         CR,ZERO,OUT,STORE
  3149. VLIST2  FDB         DUP,IDDOT,SPACE,SPACE,PFA,LFA,AT
  3150.         FDB         DUP,ZEQU,QTERM,OR,ZBRAN
  3151.         FDB         VLIST1-*
  3152.         FDB         DROP
  3153.         FDB         CR
  3154.         FDB         SEMIS
  3155. *
  3156. *=======>> 223 <<   PAUSE             ; one second pause
  3157. *
  3158.         FCB         $85
  3159.         FCC         'PAUS'
  3160.         FCB         $C5
  3161.         FDB         VLIST-8
  3162. PAUSE   FDB         *+2
  3163.         LDX         #1000             ; 1000 milliseconds
  3164. PAUS1   LDAA        #$C8              ; 1 msec @ 4.00 mhz
  3165. PAUS2   DECA                          ;
  3166.         BNE         PAUS2             ;
  3167.         DEX                           ;
  3168.         BNE         PAUS1             ;
  3169.         JMP         NEXT
  3170. *
  3171. *=======>> 224 <<   C/L               ; characters/line
  3172. *
  3173.         FCB         $83
  3174.         FCC         'C/'
  3175.         FCB         $CC
  3176.         FDB         PAUSE-8
  3177. CL      FDB         DOCON             ; 64 characters per line
  3178.         FDB         64
  3179. *
  3180. *=======>> 225 <<   DEPTH             ; no operation
  3181. *
  3182.         FCB         $85
  3183.         FCC         'DEPT'
  3184.         FCB         $C8
  3185.         FDB         CL-6
  3186. DEPTH   FDB         DOCOL,SZERO,AT,SPAT
  3187.         FDB         SUB,TWO,SLASH,ONE,SUB
  3188.         FDB         SEMIS
  3189. *
  3190. *=======>> 226 <<   .S                  ; print out contents of stack
  3191. *
  3192.         FCB         $82
  3193.         FCC         '.'
  3194.         FCB         $D3
  3195.         FDB         DEPTH-8
  3196. DOTS    FDB         DOCOL,DEPTH,ZBRAN   ; if zero, print empty message
  3197.         FDB         DOTS2-*
  3198.         FDB         CR,SPAT,TWO,SUB
  3199.         FDB         SZERO,AT,TWO,SUB
  3200.         FDB         XDO1
  3201. DOTS1   FDB         I,AT,DOT,LIT,$FFFE,XPLOOP
  3202.         FDB         DOTS1-*
  3203.         FDB         BRAN
  3204.         FDB         DOTS3-*             ; skip over message
  3205. DOTS2   FDB         PDOTQ
  3206.         FCB         14
  3207.         FCC         ' stack empty! '
  3208. DOTS3   FDB         QUIT,SEMIS
  3209. *
  3210. *=======>> 227 <<   DUMP
  3211. *
  3212.         FCB         $84
  3213.         FCC         'DUM'
  3214.         FCB         $D0
  3215.         FDB         DOTS-5
  3216. DUMP    FDB         DOCOL,HEX,CR,CR,LIT,5,SPACES
  3217.         FDB         LIT,16,ZERO,XDO1
  3218. DUMP1   FDB         I,LIT,3,DOTR,XLOOP
  3219.         FDB         DUMP1-*
  3220.  
  3221.         FDB         TWO,SPACES,LIT,16,ZERO,XDO1
  3222. DUMP2   FDB         I,ZERO,BDIGS,DIG,EDIGS,TYPE,XLOOP
  3223.         FDB         DUMP2-*
  3224.  
  3225.         FDB         CR,OVER,PLUS,SWAP,DUP,LIT,$F
  3226.         FDB         AND,XOR,XDO1
  3227. DUMP3   FDB         CR,I,ZERO,LIT,4,DDOTR,ONE
  3228.         FDB         SPACES,I,LIT,16,PLUS,I
  3229.  
  3230.         FDB         OVER,OVER,XDO1
  3231. DUMP4   FDB         I,CAT,SPACE,ZERO,BDIGS,DIG,DIG
  3232.         FDB         EDIGS,TYPE,XLOOP
  3233.         FDB         DUMP4-*
  3234.  
  3235.         FDB         TWO,SPACES,XDO1
  3236. DUMP5   FDB         I,CAT,DUP,LIT,32,LESS,ZBRAN
  3237.         FDB         DUMP6-*
  3238.         FDB         DROP,LIT,46
  3239. DUMP6   FDB         DUP,LIT,126,GREAT,ZBRAN
  3240.         FDB         DUMP7-*
  3241.         FDB         DROP,LIT,46
  3242. DUMP7   FDB         EMIT,XLOOP
  3243.         FDB         DUMP5-*
  3244.  
  3245.         FDB         LIT,16,XPLOOP
  3246.         FDB         DUMP3-*
  3247.         FDB         CR,SEMIS
  3248. *
  3249. *=======>> 228 <<   ROOM                ; number of bytes available
  3250. *
  3251.         FCB         $84
  3252.         FCC         'ROO'
  3253.         FCB         $CD
  3254.         FDB         DUMP-7
  3255. ROOM    FDB         DOCOL,SZERO,AT,DP,AT
  3256.         FDB         SUB,CR,DOT
  3257.         FDB         PDOTQ
  3258.         FCB         16
  3259.         FCC         ' bytes available'
  3260.         FDB         CR,SEMIS
  3261. *
  3262. *=======>> 229 <<   U.                  ; print unsigned double number
  3263. *
  3264.         FCB         $82
  3265.         FCC         'U'
  3266.         FCB         $AE
  3267.         FDB         ROOM-7
  3268. UDOT    FDB         DOCOL,ZERO
  3269.         FDB         DDOT,SEMIS
  3270. *
  3271. *=======>> 230 <<   NEXT-LINK           ; address of NEXT
  3272. *
  3273.         FCB         $89
  3274.         FCC         'NEXT-LIN'
  3275.         FCB         $CB
  3276.         FDB         UDOT-5
  3277. NEXTLNK FDB         DOCON
  3278.         FDB         NEXT
  3279. *
  3280. *=======>> 231 <<   W                   ; address of W
  3281. *
  3282.         FCB         $81
  3283.         FCB         $D7
  3284.         FDB         NEXTLNK-12
  3285. WREG    FDB         DOCON
  3286.         FDB         W
  3287. *
  3288. *=======>> 232 <<   IP                  ; address of IP
  3289. *
  3290.         FCB         $82
  3291.         FCC         'I'
  3292.         FCB         $D0
  3293.         FDB         WREG-4
  3294. IPREG   FDB         DOCON
  3295.         FDB         IP
  3296. *
  3297. *=======>> 235 <<   FLUSH             ; flush updated buffers to disk
  3298. *
  3299.         FCB         $85
  3300.         FCC         'FLUS'
  3301.         FCB         $C8
  3302.         FDB         IPREG-5
  3303. FLUSH   FDB         DOCOL
  3304.         FDB         LIT,8,ZERO,XDO1
  3305. FLUSH1  FDB         LIT,$7FFF,BUFFER,DROP,XLOOP
  3306.         FDB         FLUSH1-*
  3307.         FDB         SEMIS
  3308. *
  3309. *=======>>   <<     -ROT
  3310. *
  3311.         FCB         $84
  3312.         FCC         '-RO'
  3313.         FCB         $D4
  3314.         FDB         FLUSH-8
  3315. DROT    FDB         DOCOL,SWAP,TOR
  3316.         FDB         SWAP,FROMR,SEMIS
  3317. *
  3318. *=======>>   <<     PICK
  3319. *
  3320.         FCB         $84
  3321.         FCC         'PIC'
  3322.         FCB         $CB
  3323.         FDB         DROT-7
  3324. PICK    FDB         DOCOL,DUP,PLUS,SPAT
  3325.         FDB         PLUS,AT,SEMIS
  3326. *
  3327. *=======>>   <<     MYSELF
  3328. *
  3329.         FCB         $C6
  3330.         FCC         'MYSEL'
  3331.         FCB         $C6
  3332.         FDB         PICK-7
  3333. MSELF   FDB         DOCOL,LATEST,PFA,CFA,COMMA,SEMIS
  3334. *
  3335. *=======>>   <<     ROLL
  3336. *
  3337.         FCB         $84
  3338.         FCC         'ROL'
  3339.         FCB         $CC
  3340.         FDB         MSELF-9
  3341. ROLL    FDB         DOCOL,DUP,TWO,LESS,ZBRAN
  3342.         FDB         ROL1-*
  3343.         FDB         DROP,BRAN
  3344.         FDB         ROL2-*
  3345. ROL1    FDB         SWAP,TOR,ONE,SUB
  3346.         FDB         ROLL,FROMR,SWAP
  3347. ROL2    FDB         SEMIS
  3348. *
  3349. *=======>>   <<     2SWAP
  3350. *
  3351.         FCB         $85
  3352.         FCC         '2SWA'
  3353.         FCB         $D0
  3354.         FDB         ROLL-7
  3355. TSWAP   FDB         DOCOL,ROT,TOR
  3356.         FDB         ROT,FROMR,SEMIS
  3357. *
  3358. *=======>>   <<     2ROLL
  3359. *
  3360.         FCB         $84
  3361.         FCC         '2RO'
  3362.         FCB         $D4
  3363.         FDB         TSWAP-8
  3364. TROT    FDB         TOR,TOR,TSWAP
  3365.         FDB         FROMR,FROMR,TSWAP,SEMIS
  3366. *
  3367. *=======>>   <<     2DROP
  3368. *
  3369.         FCB         $85
  3370.         FCC         '2DRO'
  3371.         FCB         $D0
  3372.         FDB         TROT-7
  3373. TDROP   FDB         DOCOL,DROP,DROP,SEMIS
  3374. *
  3375. *=======>>   <<     2DUP 
  3376. *
  3377.         FCB         $84
  3378.         FCC         '2DU'
  3379.         FCB         $D0
  3380.         FDB         TDROP-8
  3381. TDUP    FDB         DOCOL,OVER,OVER,SEMIS
  3382. *
  3383. *=======>>   <<     2OVER
  3384. *
  3385.         FCB      $85
  3386.         FCC      '2OVE'
  3387.         FCB      $D2
  3388.         FDB      TDUP-7
  3389. TOVER   FDB      DOCOL,LIT,4,PICK
  3390.         FDB      LIT,4,PICK,SEMIS
  3391. *
  3392. *=======>>   <<     D- 
  3393. *
  3394.         FCB      $82
  3395.         FCC      'D'
  3396.         FCB      $AD
  3397.         FDB      TOVER-8
  3398. DSUB    FDB      DOCOL,DMINUS,DPLUS,SEMIS
  3399. *
  3400. *=======>>   <<     D0=
  3401. *
  3402.         FCB      $83
  3403.         FCC      'D0'
  3404.         FCB      $BD
  3405.         FDB      DSUB-5
  3406. DZEQ    FDB      DOCOL,OR,ZEQU,SEMIS
  3407. *
  3408. *=======>>   <<     D0<
  3409. *
  3410.         FCB      $83
  3411.         FCC      'D0'
  3412.         FCB      $BC
  3413.         FDB      DZEQ-6
  3414. DZLS    FDB      DOCOL,SWAP,DROP
  3415.         FDB      ZLESS,SEMIS
  3416. *
  3417. *=======>>   <<     D=
  3418. *
  3419.         FCB      $82
  3420.         FCC      'D'
  3421.         FCB      $BD
  3422.         FDB      DZLS-6
  3423. DEQ     FDB      DOCOL,DSUB
  3424.         FDB      DZEQ,SEMIS
  3425. *
  3426. *=======>>   <<     D<
  3427. *
  3428.         FCB      $82
  3429.         FCC      'D'
  3430.         FCB      $BC
  3431.         FDB      DEQ-5
  3432. DLS     FDB      DOCOL,DSUB,DZLS,SEMIS
  3433. *
  3434. *=======>>   <<     D>
  3435. *
  3436.         FCB      $82
  3437.         FCC      'D'
  3438.         FCB      $BE
  3439.         FDB      DLS-5
  3440. DGT     FDB      DOCOL,TSWAP,DLS,SEMIS
  3441. *
  3442. *=======>>   <<     D+-
  3443. *
  3444.         FCB      $83
  3445.         FCC      'D+'
  3446.         FCB      $AD
  3447.         FDB      DGT-5
  3448. DPLM    FDB      DOCOL,ZLESS,ZBRAN
  3449.         FDB      DPLM1-*
  3450.         FDB      MINUS
  3451. DPLM1   FDB      SEMIS
  3452. *
  3453. *=======>>   <<     D*
  3454. *
  3455.         FCB      $82
  3456.         FCC      'D'
  3457.         FCB      $AA
  3458.         FDB      DPLM-6
  3459. DSTAR   FDB      DOCOL,OVER,LIT,5,PICK
  3460.         FDB      USTAR,LIT,6,ROLL
  3461.         FDB      LIT,4,ROLL,STAR,PLUS,TSWAP
  3462.         FDB      STAR,PLUS,SEMIS
  3463. *
  3464. *=======>>   <<     UM*
  3465. *
  3466.         FCB      $83
  3467.         FCC      'UM'
  3468.         FCB      $AA
  3469.         FDB      DSTAR-5
  3470. UMSTR   FDB      DOCOL,TOR,OVER,USTAR
  3471.         FDB      ROT,FROMR,STAR,PLUS,SEMIS
  3472. *
  3473. *=======>>   <<     UM/
  3474. *
  3475.         FCB      $83
  3476.         FCC      'UM'
  3477.         FCB      $AF
  3478.         FDB      UMSTR-6
  3479. UMSLSH  FDB      DOCOL,SWAP,OVER
  3480.         FDB      SLMOD,TOR,SWAP
  3481.         FDB      USLASH,SWAP,DROP
  3482.         FDB      FROMR,SEMIS
  3483. *
  3484. *=======>>   <<     RESTORE             ; restore disk head to track 0
  3485. *
  3486.         FCB         $87
  3487.         FCC         'RESTOR'
  3488.         FCB         $C5
  3489.         FDB         UMSLSH-6
  3490. RESTR   FDB         *+2
  3491. *
  3492. *
  3493. *
  3494.         JMP         NEXT
  3495. *
  3496. *=======>>   <<     SEEK                ; disk head to track 
  3497. *
  3498.         FCB         $84
  3499.         FCC         'SEE'
  3500.         FCB         $CB
  3501.         FDB         RESTR-10
  3502. DSEEK   FDB         *+2                 ;
  3503. *
  3504. *
  3505. *
  3506.         JMP         NEXT                ;
  3507. *
  3508. *=======>>   <<     TRACK               ; disk head to track 
  3509. *
  3510.         FCB         $85
  3511.         FCC         'TRAC'
  3512.         FCB         $CB
  3513.         FDB         DSEEK-7
  3514. DTRACK  FDB         DOUSER              ;
  3515.         FDB         XTRACK-UORIG        ; 
  3516. *
  3517. *=======>>   <<     SECTOR              ;  
  3518. *
  3519.         FCB         $86
  3520.         FCC         'SECTO'
  3521.         FCB         $D2
  3522.         FDB         DTRACK-8
  3523. DSECTOR FDB         DOUSER              ;
  3524.         FDB         XSECTOR-UORIG       ; 
  3525. *
  3526. *=======>>   <<                         ;  
  3527. *
  3528.         FCB         $87
  3529.         FCC         'DSTATU'
  3530.         FCB         $D3
  3531.         FDB         DSECTOR-9
  3532. DSTAT   FDB         DOUSER              ;
  3533.         FDB         XDSTAT-UORIG        ; 
  3534.  
  3535. *
  3536. *=======>> XX <<    NOOP                ; no operation
  3537. *
  3538.         FCB         $84
  3539.         FCC         'NOO'
  3540.         FCB         $D0
  3541.         FDB         DSTAT-10
  3542. NOOP    FDB         NEXT              ; a useful no-op
  3543. *
  3544. *                   end of  forth
  3545. *
  3546. *
  3547. *       reset vectors for rom 
  3548. *
  3549.         ORG         $FFD6
  3550.  
  3551. SCI     FDB         INIT
  3552. SPI     FDB         INIT
  3553. PAIE    FDB         INIT
  3554. PAO     FDB         INIT
  3555. TOF     FDB         INIT
  3556. TOC5    FDB         INIT
  3557. TOC4    FDB         INIT
  3558. TOC3    FDB         INIT
  3559. TOC2    FDB         INIT
  3560. TOC1    FDB         INIT
  3561. TIC3    FDB         INIT
  3562. TIC2    FDB         INIT
  3563. TIC1    FDB         INIT
  3564. RTI     FDB         INIT
  3565. IRQ     FDB         INIT
  3566. XIRQ    FDB         INIT
  3567. SWI     FDB         INIT
  3568. ILLOP   FDB         INIT
  3569. COP     FDB         INIT
  3570. CLM     FDB         INIT
  3571. RST     FDB         INIT
  3572. *
  3573. *
  3574. *
  3575. *           END
  3576.